→ andymai:余小章的部落格除了這個~還有蠻多東西可以看的... 07/21 22:31
感謝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