修复跨线程异常

时间:2011-10-27 17:13:14

标签: c# .net multithreading exception

我需要一些修复跨线程异常的帮助。我正在使用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}

1 个答案:

答案 0 :(得分:1)

Invoke将封送回创建控件(正在使用的Invoke方法的那个)的线程。确保在所述线程上也创建了其他控件 - 也就是说,确保没有在“错误的线程”上创建一个控件以开头。

此外,由于未指定Invoke目标,因此它将是包含对象/类的this.Invoke - 这可能不合适。

(或者正如Hasan Khan指出的那样,考虑WinForms计时器......在这种情况下,回调将始终在创建计时器的线程中运行。)

快乐的编码。