作者bbblue (植物进化中...)
看板C_Sharp
标题Re: [问题]方法呼叫时,执行状态的表示方式请教...
时间Wed Jul 21 22:08:51 2010
感谢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
1F:→ andymai:余小章的部落格除了这个~还有蛮多东西可以看的... 07/21 22:31