关闭使用两个线程(主线程和辅助线程)的应用程序时,有时会遇到跨线程异常。我认为正在发生的事情是主要的UI线程正在处理,而次要的线程仍在运行,并且由于次要的线程有时会调用UI线程上的东西而崩溃。
我是否需要在FormClosing
事件中手动关闭辅助线程?
感谢您的信息。
答案 0 :(得分:1)
多线程Windows应用程序中推荐的方法是使用Method Invocation
而不是直接操作在另一个线程上创建的控件。这样你永远不会得到Cross Thread Exception
。例如,您可以像这样设置文本框的文本:
form1.BeginInvoke(new MethodInvoker(()=>textbox1.text = "Hello!"));
有关更多信息,请参阅: http://msdn.microsoft.com/en-us/library/ms171728(v=vs.85).aspx
答案 1 :(得分:1)
一旦有了长时间运行的专用线程,就必须为它实现关闭逻辑。原因很简单:在至少有一个线程存活之前,应用程序不会被操作系统杀死。是的,没有“主线程”这样的东西,从操作系统的角度看,所有线程都是相同的。
鉴于此,一旦您的应用程序计划退出,您必须
现在你可以自由退出了。
答案 2 :(得分:1)
我是否需要手动关闭辅助线程?
不,是的。
不,如果您的辅助线程是后台线程。您可以在辅助线程上检查/设置IsBackground属性。当没有前台线程运行时,CLR会自动停止所有后台线程。例如,所有ThreadPool线程都是后台线程。
是的,但是,当您在辅助线程中执行某些关键任务并且您不希望它突然停止时。在这种情况下,您将必须实现适当的逻辑来停止您的辅助线程。