Ush*_*haP 6 c# multithreading synchronization
我正在尝试编写多线程代码并面临一些同步问题.我知道这里有很多帖子,但我找不到合适的东西.
我有一个System.Timers.Timer每30秒经过一次,它进入数据库并检查是否有任何新的工作.如果他找到了一个,他就会在当前线程上执行该作业(计时器为每个经过的时间打开新线程).当作业正在运行时,我需要通知主线程(定时器所在的位置)有关进度的信息.
笔记:
beginInvoke像通常在winforms中那样做(或使用后台线程).ISynchronizeInvoke,但看起来有点矫枉过正(也许我在这里错了).我的问题是:
什么是通知我的主线程有关我的工作线程中的任何进展的正确方法?
谢谢你的帮助.
使用事件。例如,BackgroundWorker 类是专门为您的想法而设计的。
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
该ReportProgress函数与ProgressChanged事件一起用于进度更新。
pullJobTimer.Elapsed += (sender,e) =>
{
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += (s,e) =>
{
// Whatever tasks you want to do
// worker.ReportProgress(percentComplete);
};
worker.ProgressChanged += mainThread.ProgressChangedEventHandler;
worker.RunWorkerAsync();
};
Run Code Online (Sandbox Code Playgroud)