【发布时间】:2016-06-14 15:41:00
【问题描述】:
我有一个ApplicationContext 和一个Form。各种异步通信和定时线程有时可能需要重新启动应用程序,但是在我重新启动之前,我必须手动处理 MyApplicationContext 这需要释放新资源时立即需要的资源过程开始。
在这种情况下,似乎只调用Application.Restart() 并不能足够快地处理资源。
在对MyApplicationContext.Dispose() 的调用中,对base.Dispose(disposing) 的后续调用最终调用了Form.Dispose() 方法,因为这可能源自各种线程,我已经看到发生了跨线程操作异常。
/// MyApplicationContext.requestRestart()
private void requestRestart()
{
this.Dispose(); // dispose of applicationcontext
Application.Restart();
}
导致...
/// MyApplicationContext.Dispose(bool)
protected override void Dispose(bool disposing)
{
/// dispose stuff
base.Dispose(disposing);
}
导致...
/// MainForm.Dispose(bool)
protected override void Dispose(bool disposing)
{
/// dispose stuff
base.Dispose(disposing);
}
可以从任何线程调用。
像这样在Form UI 线程上 Invoke 被覆盖的 dispose 处理程序是否安全?
protected override void Dispose(bool disposing)
{
if (this.InvokeRequired)
{
this.Invoke(new Action(() => Dispose(disposing)));
}
else
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
}
【问题讨论】:
标签: c# .net multithreading winforms invoke