我想在主窗體運行時在窗體中顯示處理圖像。如何在我的主窗體中顯示處理窗體
我已經創建了處理表單。
我
ProcessingForm obj = new ProcessingForm();
obj.show();
DOSomeStuff();
obj.close();
試了一下它顯示處理form..but一段時間就變成沒有響應......或者我的GIF圖像動畫停止。
怎麼做?
我想在主窗體運行時在窗體中顯示處理圖像。如何在我的主窗體中顯示處理窗體
我已經創建了處理表單。
我
ProcessingForm obj = new ProcessingForm();
obj.show();
DOSomeStuff();
obj.close();
試了一下它顯示處理form..but一段時間就變成沒有響應......或者我的GIF圖像動畫停止。
怎麼做?
您可以使用BackgroundWorker
類來分離表單消息處理和處理您的代碼如DoSomeStuff()
的代碼。如果你想知道你的DoSomeStuff()
已經完成了什麼進程,你可以在你的後臺工作者中實現,因爲這個類支持它。
但如果你的環境是放緩至獲得實時此兩件事情的處理,你必須給你的BackgroundWorker的一些優先級最低那麼你的圖像可以實時工作,但你的東西做得更長。 這不是很好的解決方案,因爲取決於環境。
我從CodeProject使用this code。這是一個類似於Firefox使用的「旋轉」計時器動畫。
添加DLL作爲項目的引用,並刪除您的窗體上的進度指示器。
設置它的初始狀態是不可見的。
然後,當你想展示你的處理來電:
this.progressIndicator.Visible = true;
this.progressIndicator.Start();
要刪除它時,處理完成呼叫:
this.progressIndicator.Stop();
this.progressIndicator.Visible = false;
它採用了System.Windows.Forms.Timer
控制動畫,並覆蓋OnPaint
方法來繪製旋轉的圖像。這可能和你需要的一樣準確。
我不是作家,但我已經使用這個並沒有與它減慢實際過程明顯下降的任何問題。
但是,你必須把你的處理到另一個線程 - 使用BackgroundWorker
類,否則UI將不會更新。
這也不起作用,因爲OP的ProcessingForm不起作用。當UI線程不泵送消息循環時沒有Tick事件。 – 2010-06-11 14:02:37
這不能工作。您必須使用BackgroundWorker來防止凍結您的UI線程。 *許多*關於它在這個網站上的線程。 – 2010-06-11 14:05:45