同步线程 - 没有UI

Ush*_*haP 6 c# multithreading synchronization

我正在尝试编写多线程代码并面临一些同步问题.我知道这里有很多帖子,但我找不到合适的东西.

我有一个System.Timers.Timer每30秒经过一次,它进入数据库并检查是否有任何新的工作.如果他找到了一个,他就会在当前线程上执行该作业(计时器为每个经过的时间打开新线程).当作业正在运行时,我需要通知主线程(定时器所在的位置)有关进度的信息.

笔记:

  1. 我没有UI,所以我不能beginInvoke像通常在winforms中那样做(或使用后台线程).
  2. 我想在我的主课上实现ISynchronizeInvoke,但看起来有点矫枉过正(也许我在这里错了).
  3. 我的工作类中有一个事件,主类注册它,我会在需要时调用事件,但我担心它可能会导致阻塞.
  4. 每项工作最多可能需要20分钟.
  5. 我可以同时运行多达20个作业.

我的问题是:

什么是通知我的主线程有关我的工作线程中的任何进展的正确方法?

谢谢你的帮助.

Jak*_*ake 1

使用事件。例如,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)