修复一个跨线程异常

本文关键字:一个 线程 异常 | 更新日期: 2023-09-27 18:12:39

我需要一些帮助来修复一个跨线程异常。我使用Invoke通常解决这个问题,但由于某种原因它不工作:

void paintTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    Invoke(new InvalidateFromSepThreadDel(InvalidateFromSepThread));
}
delegate void InvalidateFromSepThreadDel();
void InvalidateFromSepThread()
{
    TailGraph.Invalidate();
}

在Invoke:

上抛出异常

$exception{"跨线程操作无效:控制'XTailGraph'从创建它的线程以外的线程访问上。"}系统。异常{系统。InvalidOperationException}

修复一个跨线程异常

Invoke将封送回创建控件(正在使用Invoke方法的线程)的线程。确保另一个控件也创建在上述线程上——也就是说,确保一个控件没有创建在以开头的"错误线程"上。

同样,由于没有为Invoke指定目标,那么它将是包含对象/类的this.Invoke——这可能不合适。

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

快乐编码。