我有一些由后台工作者运行的代码我想要一些特定的代码,它显示了一些在主线程上下文中运行的GUI(2个原因1.它应该阻塞2.我知道处理gui有问题来自后台工作人员的控件) 我引发一个事件传递给类,并从那里监听mainForm中的事件,我检查是否需要调用并重新调用。然后调用我想在主线程中运行的实例的public方法。我有几个问题:
处理数据成员是否有任何问题,这些成员是在主线程的backgoundworker上下文中创建的 - 用于读取和查找valuse
这个问题是否有任何设计模式?理想我想运行任何委托 - 任何返回值和一些genric参数 - 作为委托内置的func - 这是有问题的,因为这意味着如果我想支持最多3个参数,有或没有返回值,我将不得不有6个事件和6个听众实际上也这样做 - 有没有人知道如何做到这一点? 谢谢!
答案 0 :(得分:1)
回答你的第一个问题:
处理在后台工作程序中创建的数据时应该没有任何问题。我已经在几个应用程序中完成了它,没有任何问题。
答案 1 :(得分: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实现了该接口,因此它可以识别它并且可以显示它是否需要(在我的情况下有2个进度条) 只有问题是,frmLoading必须在构造函数中有这个:
Control.CheckForIllegalCrossThreadCalls= false;
在某些情况下可能存在风险(不是我的情况)。
我认为主进程调用接口来更新进度,而真实接口消耗的是一个模式。 希望这有帮助,如果你愿意,我可以添加更多东西。
此致