我的课我写的是使用多线程,我有我为我的类创建的扩展方法,以线程安全的方式引发事件。
static class MultiThreadHelper
{
public static object Raise(this MulticastDelegate eventToRaise, object sender, EventArgs e)
{
object retVal = null;
MulticastDelegate threadSafeMulticastDelegate = eventToRaise;
if (threadSafeMulticastDelegate != null)
{
foreach (Delegate d in threadSafeMulticastDelegate.GetInvocationList())
{
var synchronizeInvoke = d.Target as ISynchronizeInvoke;
if ((synchronizeInvoke != null) && synchronizeInvoke.InvokeRequired)
{
retVal = synchronizeInvoke.EndInvoke(synchronizeInvoke.BeginInvoke(d, new[] { sender, e }));
}
else
{
retVal = d.DynamicInvoke(new[] { sender, e });
}
}
}
//Return the value of the event invocation or null if none.
return retVal;
}
}
当我的表单试图关闭一个挥之不去的线程时,仍在尝试报告,并引发一个不再有处理程序的事件。
我最终得到以下错误......
在发生线路错误之前,我可以运行哪种检查?我还能做些什么,或者采取不同的方法来解决这个问题?
答案 0 :(得分:2)
我的第一个想法是ManifestBuilder
在关闭时不会取消订阅。确保使用-=
语法取消订阅。