2010-04-07 33 views
1

我有一些代码正在运行的背景工作者我想要一些特定的代码,它显示了一些GUI在主线程上下文中运行(2个原因1。它应该是阻塞的2.我知道这是处理来自后台工作人员的GUI控件的问题) 我引发一个事件传递类并从mainForm中侦听事件,我检查是否需要调用并重新调用。然后调用我想要在主线程中运行的实例的公共方法。我有几个问题:委托代码从主线程运行主线程来处理gui

  1. 有处理它们在主线程的backgoundworker背景下创建的数据成员的任何问题 - 供读取和chaning valuse

  2. 有任何设计图案的这样的问题?理想情况下,我想运行任何代表 - 任何返回值和几个genric参数 - 作为在委托中构建的func - 这是有问题的,因为这意味着如果我想要支持多达3个带或不带返回值的参数,我必须有6个事件和6个听众实际上是一样的 - 有没有人有如何做到这一点的想法是正确的? 谢谢!

回答

1

我刚刚写了一个类似的问题。

我使用这些东西的线程。

的地方在我的代码:

// Definition 
private static Thread TH; 

....

// When process starts 
TH = new Thread(new ThreadStart(Splash_MyCallBack)); 
TH.Start(); 

....

// This method starts the form that shows progress and other data 
static private void Splash_MyCallBack() 
{ 
    frmLoading FL; 

    FL = new frmLoading(); 

    FL.ShowDialog(); 

} /* Splash_MyCallBack*/ 

// Your process calls Splash_Stop when it is done. 
static public void Splash_Stop() 
{ 
    TH.Abort(); 
} /* Splash_Stop*/ 

frmLoading进行可视化的东西,而在后台我有一个非常处理器密集型的任务。 我的进程向接口报告其进度。 frmLoading实现该接口,因此是意识到这一点,并能显示whaever需要它(在我的情况2进度条) 仅临屋的缺点是,frmLoading必须在构造函数中有这样的:

Control.CheckForIllegalCrossThreadCalls= false; 

这可能是危险的在某些情况下(不是我的情况)。

我认为主进程调用一个接口来更新进度的事实,而真实接口消耗的是一种模式。 希望这可以帮助,如果你喜欢,我可以添加更多的东西。

Regards,

1

要回答你的第一个问题:

不应该有操作在后台工作人员创建的数据的任何问题。我已经在几个应用程序中完成了它,并没有遇到任何问题。

相关问题