【发布时间】:2014-01-09 21:45:57
【问题描述】:
我有一个可以从命令行以安静模式运行的 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 启动。这样跑一切都很开心。当我将主函数移动到一个名为“程序”的类并启动表单时,它变得线程不安全。我在想我也许可以使用 rtb.invokerequired,但我在语法上遇到了问题。
【问题讨论】:
-
有争议的解决方案:将行
Control.CheckForIllegalCrossThreadCalls = true;添加到程序初始化代码中,您的应用程序将在每次无效的跨线程操作时都会失败。然后使用Control.BeginInvoke和Control.Invoke方法解决问题。
标签: c# winforms c#-4.0 thread-safety