修复一个跨线程异常
本文关键字:一个 线程 异常 | 更新日期: 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定时器…在这种情况下,回调将始终在创建计时器的线程中运行。
快乐编码。