2012-08-14 35 views
0

我是新來的Visual Studio和C#。剛剛完成了Windows窗體應用程序,但發現了以下錯誤。每當用戶最小化/恢復它或切換到另一個任務時,程序就會消失(顯示「不響應」)。這個bug可以防止用戶在運行這個程序時的多任務處理,所以我真的想修復if。 我想知道這個問題的可能原因是什麼,以及如何解決它們。我真的很感激任何建議。謝謝!無法爲Windows窗體應用程序切換任務

+0

聽起來像你可能正在做的事情在Control.LostFocus事件處理程序鎖定GUI。在您的代碼中可以發佈的任何類似內容? – 2012-08-14 18:03:19

+0

我沒有任何有關Control.LostFocus事件處理程序的代碼。該程序有近2000行,我不認爲發佈一小部分代碼會有所幫助。正如彼得在下面所說的,我認爲巨環是迄今爲止的主要原因。 – andyzhangcr7 2012-08-14 18:59:39

回答

1

這可能是因爲您在Form中有長時間運行循環或長時間運行的操作。當您最小化和恢復時,只看到「未響應」的事實可能是由於您已強制窗口重新繪製並強制Windows識別該應用程序已掛起並使用虛幻窗口。在最小化和恢復之前,窗口可能已經掛起。您可以通過嘗試移動窗口來驗證這一點。如果它不動,就會掛起。如果它確實移動了,請嘗試將標題欄移出屏幕並返回(例如,在標題欄中間單擊並將它一直拖到右側並釋放該按鈕,然後執行相同操作並將其重新顯示在屏幕上)。

+0

當我試圖移動窗口時,程序掛起。如果你不試圖移動或最小化程序,它就會正常工作。我同意你的觀點,可能是由於運行一個巨大的循環造成的。但是該程序必須首先迭代100k +行文件。任何可能的原因除了循環關注? – andyzhangcr7 2012-08-14 19:03:41

+0

它似乎工作正常,窗戶仍然掛着。如果您切換到另一個應用程序並返回,則會出現類似的「無響應」問題。它可能是一個循環或其他一些冗長的操作,沒有看到代碼中有無數的猜測。解決這個問題的唯一方法是找到冗長的操作並將其從UI線程移到另一個線程。 BackgroundWorker對此很有用。 – 2012-08-14 19:06:27

+0

對不起,我不能發佈此項目的代碼,但無論如何感謝 – andyzhangcr7 2012-08-14 19:17:16

1

如果我沒有錯,你正在運行一個UI凍結的問題。如果是這樣,你爲什麼不使用C#BackgroundWorker。它可以幫助您防止凍結窗口窗體,無論您是否執行長期任務。你可以在這裏找到一個很好的教程http://www.dotnetperls.com/backgroundworker。希望這會有所幫助。

相關問題