簡體   English   中英

C#Windows窗體關閉

[英]C# Windows Form Close

我在.Net Framework 4.0中有一個基於C#Windows窗體Menu的應用程序。 在我的選擇中,表單中添加了太多控件。 DataGridView是我在窗體上的第一個控件。 我在DataGridViewCellDoubleClick上處理了一個事件,在此事件中,我設置了所有控件的值,並且此事件觸發了太多事件,並且此事件也調用了太多方法。

我的問題是我雙擊DataGridViewCell然后立即單擊表單退出按鈕。 我的表單立即關閉,但是我的CellDoubleClick事件被觸發並正在執行,並且我遇到了太多的問題,因為表單已關閉但我的代碼正在執行,所以發生了異常。

我該如何解決這個問題,即當事件完全執行時表單沒有關閉,或者我的事件不應該執行,或者我可以在表單的Closing事件中執行一些代碼來防止出現此問題。

監聽FormClosing事件,然后在后台進程繁忙時將e.Cancel = true設置e.Cancel = true

將此登錄名添加到您的代碼中...我希望它可以工作。

bool inProcess = false;

private void DataGridViewCellDoubleClick(...)
{
   inProcess = true;
   //Write all ur code
   inProcess = false;
}

private void Form_Closing(...)
{
   e.Cancel = inProcess;
}

@Shell處於正確的軌道,但是在代碼完成后關閉表單,而不是取消Form_Close,請嘗試以下操作:

bool inProcess = false;

private void DataGridViewCellDoubleClick(...)
{
    inProcess = true;
    //Write all your code
   inProcess = false;
}

private void Form_Closing(...)
{
    while(inProcess)
    {
    Application.DoEvents();
    }
}

在基於注釋者的提示進行了一些研究之后,我必須補充一點,在while循環期間不會禁用您的表單,因此用戶有很多機會來弄亂您的執行順序。 如果要在進入while循環之前隱藏該窗體或禁用所有控件,則情況可能不會那么嚴重,但是使用單獨的線程是正確的方法。

如果要退出應用程序(如果主窗體上有數據網格),而不僅僅是退出窗口,則可以使用Application.ExitThread方法-ExitThread()或Application.Exit()方法(如果您具有IsBackground屬性)設置為true將會殺死進程線程,並應停止觸發事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM