在委派中 同時又要控制 外部控制項
首先 基礎的初學者通常語法大概長這樣如下
private void button9_Click(object sender, EventArgs e)
{//建立無傳入參數的委派物件GO
MethodInvoker GO = new MethodInvoker(sshh);
Invoke(GO);//開始執行GO委派物件
}
public void sshh()
{//將外部控制向屬性,打入已執行
label6.Text = "已執行";
}
進階的話 有人會使用匿名法 一時難以理解 CODE如下
private void button9_Click(object sender, EventArgs e)
{
Invoke((MethodInvoker)delegate{label5.Text="已執行";});
}
再來如果今天 觸發INVOK不是 BUTTON的話而是 方法或委派或多程序
我們就要..
範例如下
private void button11_Click(object sender, EventArgs e)
{
Thread po = new Thread(new ThreadStart(Dooo));
po.Start();
}
public void Dooo()
{
MethodInvoker ee = new MethodInvoker(delegate { label6.Text = "SSSSS"; });
Invoke(ee);
}
也可以在縮寫如下
Invoke((MethodInvoker)delegate { label6.Text = "WWW"; });
再來更進階一點的範例
比如說 方塊又戲中的 時鐘 或 計時器
計時一分鐘
我們用多程序來執行時鐘 並SHOW到LABLE上
計時器範例如下
private void button10_Click(object sender, EventArgs e)
{//建立多程序 G,多程序啟動委派匿名方式
Thread G = new System.Threading.Thread(delegate()
{
int P_int_count = 0;//宣告整數當作秒數累加計時器用
while (true)//開始無限循環
{//計數累加1之後做判斷,三元判斷
//++P_int_count 先+1才做判斷喔~
//如果P_int_count沒超過100000000的話 判斷為P_int_count自己
P_int_count = ++P_int_count > 100000000 ? 0 : P_int_count;
//再利用INVOKE啟動,匿名委派中的方法 而方法再去控制外部LABLE
Invoke((MethodInvoker)delegate { label7.Text = P_int_count.ToString(); });
System.Threading.Thread.Sleep(1000);//睡眠1秒在重複執行
}
}
);
G.Start();//開始執行多程序
}
沒有留言:
張貼留言