[英]Winform freezes when I try to close it
我有以下代码
private void btnClose_Click(object sender, System.EventArgs e)
{
Close();
} // btnClose_Click
运行close winforms函数后,应用程序冻结。 知道为什么会这样吗?
我使用.net 2.0,我在Windows 7 vs2005下运行
编辑:
我在调试器中按下暂停后,我来了
private void MainForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// GUI
if (FScannerThread_Running)
{
FScannerThread_Running = false;
FScannerThread.Join();
}
}
它堆叠在FScannerThread.Join();
任何想法我怎么能杀了它?
使用bool Thread.Join(int milliseconds)
重载,如果结果为false,则使用Abort()
线程。
private void MainForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// GUI
if (FScannerThread_Running)
{
FScannerThread_Running = false;
if (!FScannerThread.Join(1000)) // Give the thread 1 sec to stop
{
FScanner.Abort();
}
}
}
请注意,您应该在线程中捕获ThreadAbortException
以便优雅地结束它(例如,如果您要发布某些内容)。
当它被冻结时,在调试菜单中调用暂停(全部中断) - 您将看到应用程序的不同线程可能挂起的位置。 这里的平台并不重要。 有时,如果您有多线程应用程序,并且在某些线程中状态已损坏或类似,则可能发生这种情况。
最有可能的是它
FormClosing
或FormClosed
事件中执行的操作 在你的情况下它是两个:)
理想情况下,如果可能,重写线程方法以正确考虑中止(例如,通过使用其中一个同步原语)。 如果没有,您可以使用Thread
实例的Abort
方法,但这不是推荐的方法。
如果在关闭功能中,您只想退出应用程序,则可以替换它
Application.Exit();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.