【发布时间】:2018-09-14 05:51:34
【问题描述】:
我有一个 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
}
}
}
【问题讨论】:
-
也许使用 TPL 数据流?
-
问题是我有相同的控件实例化了两次,并且那里的线程正在混合......
标签: c# timer user-controls backgroundworker