我需要一些修复跨线程异常的帮助。我正在使用Invoke,它通常可以解决这个问题,但由于某种原因,它并没有被解决:
void paintTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Invoke(new InvalidateFromSepThreadDel(InvalidateFromSepThread));
}
delegate void InvalidateFromSepThreadDel();
void InvalidateFromSepThread()
{
TailGraph.Invalidate();
}
Invoke上抛出异常:
$ exception {“跨线程操作无效:控制'XTailGraph' 从创建它的线程以外的线程访问 on。“} System.Exception {System.InvalidOperationException}
答案 0 :(得分:1)
Invoke
将封送回创建控件(正在使用的Invoke方法的那个)的线程。确保在所述线程上也创建了其他控件 - 也就是说,确保没有在“错误的线程”上创建一个控件以开头。
此外,由于未指定Invoke
的目标,因此它将是包含对象/类的this.Invoke
- 这可能不合适。
(或者正如Hasan Khan指出的那样,考虑WinForms计时器......在这种情况下,回调将始终在创建计时器的线程中运行。)
快乐的编码。