2016-01-11 65 views
4

我們有一個應用程序運行在顯示奇怪行爲的客戶端。在白天的隨機時間,某些窗體上的確定按鈕(它調用Form.Close方法)不會導致窗體關閉。與此我的意思是,用戶將單擊按鈕,在跟蹤中它將顯示該Form.Close被調用,但表單不會關閉。窗體調用Form.Close後不關閉

奇怪的是,表單本身仍然是響應,所以他們可以點擊窗體上的任何按鈕,按鈕後面的代碼將執行,但窗體不會關閉。

這種狀態持續幾秒到幾分鐘之間的任何事情。然後突然之間表單將開始處置並消失。真奇怪。

因此,要回顧一下,會發生以下情況:

  • Form.ShowDialog() - >形式顯示
  • 用戶處理形式,並按下按鈕等等
  • Form.Close()被稱爲 - >用戶點擊了關閉按鈕
  • 一段時間過去了,表單正在等待關閉,同時仍然響應(此時沮喪的用戶敲擊關閉按鈕幾次而沒有響應)
  • 突然形式處置和對話的結果從Form.ShowDialog

東西還給注意:

  • 我沒有使用任何類型的線程的。
  • 在某些時候,據報道在PC上停止了explorer.exe進程,這是否會影響表單的行爲?我們正在安排PC的重建。

我的問題是,如果有人知道可能導致上述行爲的情況?

我不是專家,但據我瞭解,當你打電話給Form.Close時,窗體並不立即關閉,當前調用Close的第一個方法結束,然後另一個進程觸發窗體開始關閉,處置。

這可能與explorer.exe進程沒有運行有關嗎?

任何有識之士將不勝感激。

***編輯

還要注意的是,我們不能複製的問題,它在客戶端隨機發生。

+3

可能[這](http://stackoverflow.com/questions/8113334/winforms-form-wont-close-on-pressing-x-or-close-in-c-sharp)可能嗎? –

+0

https://stackoverflow.com/questions/3912836/c-sharp-why-does-form-close-not-close-the-form#answer-19313930 –

+1

@SimonKarlsson我看看你的鏈接,但它不是同樣的情況。 Close方法在模態表單上被調用,因此問題不在阻塞調用中。還要注意,我們不能複製這個問題,它是隨機發生的。 – user2418900

回答

0

我想起C# Why does form.Close() not close the form?

你有在按鈕單擊事件處理程序的任何代碼只是this.Close()行之後?

我的意思:

private void OKButton_Click(object sender, EventArgs e) 
{ 
    this.Close(); 

    somecodehere <-- is there any code here? (after this.Close) 
} 

因爲表格。關閉不立即關閉表單,所以如果你在調用之後有代碼,它仍然會執行,也許這就是阻止表單關閉的原因。

+0

感謝您的建議。在這之後有一些代碼正在執行。關閉但我們已經放入跟蹤日誌記錄以確認方法完成並退出。另外,如果在此之後還有一些代碼仍在執行。關閉,表單將不會響應用戶的輸入。這就是困擾我的事情,表單仍然是響應式的,但它只是沒有結束。 – user2418900

0

可能是你可以hide關閉之前,首先讓用戶不會浮躁不安的形式,並嘗試關閉它

Form.Hide(); 
Form.Close(); 

另一個原因是在窗口關閉或析構函數可能是您要保存更大的文件或一些活動。如果是這樣,嘗試在線程中做到這一點。這樣它會盡快結束表格。

+0

感謝您的建議。我們想過隱藏表格,但這只是將問題籠罩在地毯下而不是解決問題。它也可能導致內存問題,因爲可能會有多種形式隱藏在後臺,所以我們寧願確保表單在繼續之前處理。此外,如果進程在後臺忙碌,表單將不會響應。 – user2418900

0

我同意@zdimension的答案,但我添加一些額外的信息:

  • 首先,運行在另一個系統上的應用,也許你對此有一個
  • 檢查一些奇怪的事情發生了什麼你在Close()調用後執行操作,可能會減慢關閉進程
  • 檢查您是否在FormClosing事件處理程序或類似事件中執行任何操作
  • 檢查是否爲Click事件添加了一些其他回調關閉按鈕

這些事情可能會幫助您查找是否出現問題,但我不認爲問題是您在Close()調用後執行的操作,因爲您聲稱表單仍然響應。