在命令行上运行的线程安全Windows窗体应用程序

时间:2014-01-09 13:29:01

标签: c# winforms c#-4.0 thread-safety

我有一个Windows窗体应用程序,可以从命令行以安静模式运行。我在CodeGuru.com网站上找到了一个类,它将处理在异步线程上执行命令行进程。这是演示和源代码的链接。 http://www.codeguru.com/csharp/csharp/cs_misc/userinterface/article.php/c8503/Invoking-Command-Lines-Programmatically.htm#page-2

我已经测试了独立的演示版。当然,它有点旧,但它仍然有效。我正在尝试使其适应我的应用程序但是似乎有一个细微的差别导致我的应用程序崩溃与无效操作异常 - 跨线程操作无效:控制'editExitTime'从线程以外的线程访问它创建于。

演示应用程序从具有私有静态Main函数的frmMain启动。一路走来,一切都很开心。当我将Main Function移动到一个名为“Program”的类并启动表单时,它变得线程不安全。我以为我可以使用rtb.invokerequired,但我的语法有问题。

1 个答案:

答案 0 :(得分:1)

它非常易于使用,只需复制/粘贴

即可
control.Invoke((Action)(() =>
{
    // put here some code to access control from other thread
    control.Text = "blablabla";
}));

其中control是具有创建句柄的控件之一(因为整个GUI应该在一个线程中完成)。

您可能希望详细了解Invoke / BeginInvokeInvokeRequiredHandleCreated以及Anonymous delegate和{{1}完全理解wtf是^^。