C#应用程序意外关闭!

问题描述:

我有一个非常令人沮丧的问题。我有一个C#win应用程序。当我点击按钮时,程序在执行完click事件处理程序后自动关闭。即使我已经调试了代码,但不幸的是我看不到任何错误,它只是退出程序。C#应用程序意外关闭!

我哪里错了?

这里是代码:

private void btnOpenFolder_Click(object sender, EventArgs e) 
    { 
      DialogResult dg = fd1.ShowDialog(); 
      if (dg == DialogResult.OK) 
      { 
       lblInput.Text = fd1.SelectedPath; 
       btnOpenFolder.Enabled = false; 
       timerCallback = new TimerCallback(tmrQualityEvent); 
       tmrQuality = new System.Threading.Timer(timerCallback, null, 0, 1000); 
       Thread qualityThread = new Thread(new ThreadStart(QualityMapOpenFolder)); 
       qualityThread.Start(); 
       QualityMapOpenFolder(); 
      } 
    } 

void QualityMapOpenFolder() 
    { 
     fileList.Clear(); 
     string path = lblInput.Text; 
     if (Directory.Exists(path)) 
     { 
      foreach (var file in Directory.GetFiles(path)) 
      { 
       if (Path.GetExtension(file) != ".kml") 
       { 
        fileList.Add(file); 
       } 
      } 
      SetProgressBarValue(0); 
      ChangeFileNameLabel(fileList[0]); 
      FileName = fileList[0]; 
     } 
     else 
      SetText("Please make sure you have correctly set the open folder path!", true); 

     dataListQuality = GetInputData(); 

     SetText("Calculated Data has been created, please click process files...", false); 
     SetProcessButtonStatus(true); 
    } 
+3

那么你没有向我们展示任何代码,这使得很难诊断问题。我建议你将代码复制到某个安全的地方,然后尽可能多地删除它,同时保留不良行为。然后你会知道什么是错的,或者能够发布那个简短但完整的程序供我们检查。 – 2011-06-03 07:19:49

+0

请**注意我编辑的内容,并停止向我们大喊。尽管现在你的问题迫在眉睫,但在三年内,当其他人从中解脱出来时,你将会解决这个问题。 – 2011-06-03 08:57:19

附加的事件处理程序UnhandledException handler和记录它。应该帮助你找出你的应用程序崩溃的原因。

更新:既然你已经发布了一些代码:

  1. 你似乎更新从中启动另一个线程的UI元素。您应该只从创建它们的线程(通常是主线程)访问UI组件。考虑使用一个BackgroundWorker
  2. 您在一个线程上启动QualityMapOpenFolder方法,然后在启动线程后也调用它 - 这看起来有点奇怪,并且可能有一些意想不到的副作用。
+0

让我试试吧,谢谢 – 2011-06-03 07:29:10

+0

不,我正在测试都用​​线程和线程调用它!我忘了删除第二个! – 2011-06-03 07:39:53

+0

UnhandledException处理程序效果很好,谢谢 – 2011-06-03 07:42:18

这种行为的常见原因是后台线程中未处理的异常。防止程序。

@ChrisWue写道如何检测这种异常。

另外,通常Windows应用程序日志提供了有关未处理错误的信息。

请参阅here如何防止在这种情况下查杀应用程序。

+0

是的,我正在使用线程,但它不让我知道它在哪里粉碎,但UnhandledException处理程序很好用!我现在可以看到它在哪里压碎。谢谢 – 2011-06-03 07:36:09