C#使用标志位控制的多线程停止时Invoke委托报异常
时间: 2023-06-25 21:02:56 浏览: 219
C#多线程操作控件threading的使用
5星 · 资源好评率100%
在 C# 中使用标志位控制多线程停止,是一种很常见的做法。但是在使用 Invoke 委托时,可能会出现异常。
这是因为在多线程中,控件的访问是受限的。只有创建该控件的线程才能访问该控件。而在使用 Invoke 委托时,如果委托的目标方法中访问了该控件,而该委托是由非创建该控件的线程调用的,就会导致异常的发生。
为了解决这个问题,可以使用 BeginInvoke 委托来代替 Invoke 委托。BeginInvoke 委托会在目标方法所在的线程上异步执行,因此不会导致控件访问异常的发生。
另外,也可以使用 Control.CheckForIllegalCrossThreadCalls 属性来避免控件访问异常的发生。将该属性设置为 false,就可以允许非创建该控件的线程访问该控件。但是这种做法并不推荐,因为它可能会导致程序中出现其他问题。
阅读全文