2012-07-19 117 views
0

我有一个List<MyClass>有N个项目。我用下面的代码如何从ThreadPool.QueueUserWorkItem获取进度报告

foreach (var item in myList) 
{ 
    ThreadPool.QueueUserWorkItem(DoWorkWithItem, item); 
} 

private void DoWorkWithItem(object threadContext) 
{ 
    ///... 
} 

的过程,但我需要得到的报告是处理连线什么项目,在那里我可以得到一个事件或某事完成这个任务

回答

0

创建事件,并调用它后威胁迭代完成,像这样:

public class ClassWithDelegate 
{ 
    public delegate void ProgressReportEventHandler(); 
    public static ProgressReportEventHandler ProgressReport { get; set; }; 

    private void DoWorkWithItem(object threadContext) 
    { 
     // angry code 

     if (ProgressReport != null) 
      ProgressReport(); 
    } 
} 

public class Subscriber 
{ 
    public Subscriber() 
    { 
     ClassWithDelegate.ProgressReport += ProgressReport;   
    } 

    public void ProgressReport() 
    { 
     //todo 
    } 
} 

或使用BackgroundWorker,它有这个事件

+0

你可以扩展你的榜样? – rkmax 2012-07-19 15:28:33

+0

展开,更新 – 2012-07-19 15:38:20

+0

重要的是要注意ProgressReport将从后台(线程池)线程中调用。在所有情况下,你的进度都需要以某种方式显示在UI上,在这种情况下,你将不得不通过WinForms Control.BeginInvoke或WPF的/ Silverlight的Dispatcher来将UI变更重新组织到UI线程中。 – 2012-07-19 18:37:49