我需要一些帮助来修复跨线程异常。我正在使用通常可以解决此问题的 Invoke,但由于某种原因它无法正常工作:
void paintTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Invoke(new InvalidateFromSepThreadDel(InvalidateFromSepThread));
}
delegate void InvalidateFromSepThreadDel();
void InvalidateFromSepThread()
{
TailGraph.Invalidate();
}
Invoke 抛出异常:
$exception {"Cross-thread operation not valid: Control 'XTailGraph' accessed from a thread other than the thread it was created on."} System.Exception {System.InvalidOperationException}
最佳答案
Invoke
将编码返回线程控制(正在使用 Invoke 方法的线程)是在其上创建的。确保其他控件也在所述线程上创建——也就是说,确保一个控件不是在“错误的线程”上创建的。。 p>
此外,由于没有指定 Invoke
的 target,因此它将是包含对象/类的 this.Invoke
--可能不合适。
(或者正如 Hasan Khan 指出的那样,考虑 WinForms 计时器......在这种情况下,回调将始终在创建计时器的线程中运行。)
快乐编码。
关于c# - 修复跨线程异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7919725/