[問題]方法呼叫時,執行狀態的表示方式請教...

看板C_Sharp作者 (植物進化中...)時間15年前 (2010/07/21 18:26), 編輯推噓1(108)
留言9則, 4人參與, 最新討論串1/2 (看更多)
各位先進好: 這個問題似乎是基本的程式碼執行緒流程問題, 希望能在C# window form的程式中, 表示內部方法呼叫時的執行狀態, 但是百試不得其解,希望大家能給予指點... 狀況如下: 有一個自行建立的方法A,我希望在呼叫方法A時, window form上的label物件能在進入方法/離開方法時表示處理狀態, 構想實現的原始程式碼示意如下: public void A() { label1.Text = "方法開始執行"; //狀態表示1 (方法執行內容...) label1.Text = "方法執行結束"; //狀態表示2 } 實際執行後,發現label的狀態是必須等方法執行完後, 才會回傳給Form顯示, 也就是說...「狀態表示1」是不會顯示在Form上的, 僅會在方法內部進行字串變數替換, 最後把「狀態表示2」的字串變數值傳回... 然而,把這2行指令替換為MessageBox.Show()時, 卻又能夠依序執行,而不會等到方法結束之後才一次跳出2個MessageBox... 因此, 若希望在方法呼叫後,能在Form上顯示「開始執行」與「執行結束」, 應該如何實現呢? 煩請大家指導了... 感謝~ m(_ _)m -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.132.23.123

07/21 18:34, , 1F
並不是等到結束才回傳,是等到結束才被畫出來。
07/21 18:34, 1F

07/21 18:34, , 2F
用BackgroundWorker來執行方法A,這樣就會有視覺化
07/21 18:34, 2F

07/21 18:35, , 3F
MessageBox是會打斷當前方法的執行,等到視窗回傳才
07/21 18:35, 3F

07/21 18:35, , 4F
繼續執行,所以不會一次跳兩個。
07/21 18:35, 4F

07/21 19:08, , 5F
另一種作法:在thread中,去設定label.text的內容...
07/21 19:08, 5F

07/21 19:09, , 6F
不過這種作法要用delegate去設定label的內容...
07/21 19:09, 6F

07/21 21:56, , 7F
如果不是Thread,在lab.text下方補個application.doevent()
07/21 21:56, 7F

07/21 22:15, , 8F
a大的方法也非常好用~!!我可以用不建立跨執行緒的方法了^^
07/21 22:15, 8F

07/21 22:16, , 9F
感謝大家~!! m(_ _)m
07/21 22:16, 9F
文章代碼(AID): #1CHija_Y (C_Sharp)
文章代碼(AID): #1CHija_Y (C_Sharp)