2011-06-03 96 views
0

我有一個非常令人沮喪的問題。我有一個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

回答

3

附加的事件處理程序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

0

這種行爲的常見原因是後臺線程中未處理的異常。防止程序。

@ChrisWue寫道如何檢測這種異常。

另外,通常Windows應用程序日誌提供了有關未處理錯誤的信息。

請參閱here如何防止在這種情況下查殺應用程序。

+0

是的,我正在使用線程,但它不讓我知道它在哪裏粉碎,但UnhandledException處理程序很好用!我現在可以看到它在哪裏壓碎。謝謝 – 2011-06-03 07:36:09

相關問題