我在Windows窗体应用程序的窗体中的控件中更改了一个线程,
我实现了用于防止线程交叉访问的invoke方法,
但是当我关闭表单时,第二个线程仍然工作并尝试访问控件并抛出一个未设置为对象异常实例的对象引用
如果第一个线程不活动,我怎样才能确保防止第二个线程工作
没有手动检查建议
提前致谢
答案 0 :(得分:0)
在关闭表单之前,您可以通知线程它即将被取消。例如,如果您在线程中使用BackgroundWorker
,则可以调用CancelAsync方法。
更新
要在使用Thread
类时支持此功能,您可以调用Abort - 这是不推荐的 - 或者您可以使用共享变量。基本上你可以有一个线程定期检查的布尔值isCancelled
- 如果它是假的,则线程返回。然后,您可以从UI线程设置此布尔值,以指示后台线程停止。在从任一线程访问它之前,您还需要确保正确lock
布尔值。
您还可以使用其他技术 - 如果您发布了线程代码,我们可以为您提供更多帮助。