繁体   English   中英

当我尝试关闭它时,Winform冻结

[英]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以便优雅地结束它(例如,如果您要发布某些内容)。

当它被冻结时,在调试菜单中调用暂停(全部中断) - 您将看到应用程序的不同线程可能挂起的位置。 这里的平台并不重要。 有时,如果您有多线程应用程序,并且在某些线程中状态已损坏或类似,则可能发生这种情况。

最有可能的是它

  1. 您在FormClosingFormClosed事件中执行的操作
  2. 另一个仍在运行的线程

在你的情况下它是两个:)

理想情况下,如果可能,重写线程方法以正确考虑中止(例如,通过使用其中一个同步原语)。 如果没有,您可以使用Thread实例的Abort方法,但这不是推荐的方法。

如果在关闭功能中,您只想退出应用程序,则可以替换它

Application.Exit();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM