2010-09-30 38 views
1


因为我有一个工具需要在一点上做很多工作,所以我想在工作时用一些文本和一个进度条显示一个窗口。在工作时显示带进度条的窗口

我的问题是,由于工作量巨大,窗口永远不会被绘制或更新。

我知道我通常应该使用额外的线程进行工作,但是我必须使用2个集合以及当前线程中的数据库服务。

当前的代码是一样的东西

StatusWindow SW = new StatusWindow(); 
StatusViewModel SVM = new StatusViewModel(); 

SVM.MaxNum = BigNumber; 

SW.Show(); 

for (int i=0; i<BigNumber; i++) 
{ 
    List<AType> ItemsToCreate = Func1(); 
    List<AType> ItemsToDelete = Func2(); 

    foreach (AType cItem in ItemsToCreate) 
     DB.CreateItem(cItem); 

    foreach (AType cItem in ItemsToDelete) 
     DB:DeleteItem(cItem); 

    SVM.CurrentNum = i; 
} 
SW.Close(); 

我也读到了调度员,但我不认为这是在这种情况下非常有用,因为会有主线程太大出入。

有什么建议吗?
谢谢

回答

1

只要你正在访问的对象可以从不同的线程访问,你可以传递这两个集合以及任何你想要的工作线程。

int[] arrayofInt = new int[10] 
ThreadPool.QueueUserWorkItem(s => 
     { 
      //access the array in the worker thread 
      arrayofInt[0] = 10; 
     }); 

完成工作后,您需要向对话框发送一条消息,该消息现在应该关闭。通过在线程中触发由对话框处理的事件来实现这一点。

+0

请给我一个简短的例子,说明如何将它们传递给新线程? – Marks 2010-09-30 13:17:58

+0

我编辑了我的答案一点。 – testalino 2010-09-30 13:24:58