看板 C_Sharp 關於我們 聯絡資訊
感謝o大與p大的熱心指導! 問題順利解決! 只可惜我用.Net CF 2.0開發, 所以無法使用backgroundwoker的強大功能...Orz 只能用標準委派方式來實現~ 但能解決真的很開心~^^ 另參考以下2個網站: http://msdn.microsoft.com/zh-tw/library/system.delegate(VS.80).aspx http://www.dotblogs.com.tw/yc421206/archive/2009/02/13/7141.aspx 尤其第2個網站可以一次了解到3種作法,說明的相當詳細! 最後,將我解決後的程式簡單示意分享於後: //建立delegate委派物件(關鍵1) public delegate void myMethodDelegate(string message, Control ctl); //建立接受委派(Form顯示資訊)的方法(關鍵2) private void labelShow(string message, Control ctl) { if (this.InvokeRequired) //強迫跨執行緒呼叫物件時,必須透過委派物件來呼叫 { myMethodDelegate MD = new myMethodDelegate(labelShow); this.Invoke(MD, message, ctl); } else { label1.Text = message; //接受委派呼叫的控制項元件 } } private void button1_Click(object sender, EventArgs e) //呼叫另一執行緒的方法 { Thread show = new Thread(process); show.Start(); } public void process() //欲執行的方法 { labelShow("開始執行",label1); //呼叫委派方法進行顯示(關鍵3) //欲執行的方法內容 labelShow("結束執行", label1); } ※ 引述《bbblue (植物進化中...)》之銘言: : 各位先進好: : 這個問題似乎是基本的程式碼執行緒流程問題, : 希望能在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
andymai:余小章的部落格除了這個~還有蠻多東西可以看的... 07/21 22:31