C# 计时器后台工作进程用户控件



我有一个C# Windows表单应用程序,它有一个名为"开始下载文件"的菜单,然后菜单有两个实例化的用户控件(子菜单,选项卡菜单(。 对于每个选项卡(用户控件(,我都有一个下载按钮和一个每 5 分钟运行一次的计时器。 我正在使用一个私人后台工作线程,每次控件加载并运行一种方法来开始下载文件时都会创建该工作线程。这给了我很多麻烦,我仍然找不到解决方案,因为: - 当我为两个控件启用计时器时,它们会为每个控件多次启动下载,并且我并发访问文件或 - 跨线程异常

有人经历过类似的事情,也许可以给我一个提示吗?

我的代码如下所示:

public partial class ucGeneralInfo : UserControl
{
private BackgroundWorker backgroundWorker;
private void TimerDownloadFrequency_Tick(object sender, ElapsedEventArgs e)
{
if (backgroundWorker.IsBusy != true)
{
backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
backgroundWorker.RunWorkerAsync(Branch);
}
}
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Download_Process((string) e.Argument);
}
private void Download_Process(string Branch)
{
// copying files
// processing files
}
}
}

对于并发访问,请使用lock

lock(fileLock)
{
wc.DownloadFileAsync (/*...*/);
}


对于Cross-thread exception使用Invoke

Invoke(new MethodInvoker(delegate
{
timer.Enable = true;
}));

最新更新