Re: [問題] 有關thread的問題
可能是我講得太簡化了,不過從別的執行緒使用 Control.Invoke 去呼叫
button2_Click 有點奇怪,因為都一樣是從 UI 執行緒呼叫,這樣跟直接由
button1_Click 呼叫 button2_Click 好像差異不是很大,只差在無法預測
button2_Click 到底什麼時候會在 UI 執行緒被呼叫。
之前提到的做法大概如下:
private void button1_Click(object sender, EventArgs e)
{
object[] array = new object[]{ sender, e };
ThreadPool.QueueUserWorkItem(new WaitCallback(ABC), array);
}
void ABC(object param)
{
object[] array = param as object[];
button2_Click( array[0] , array[1] as EventArgs);
}
不過前提是 button2_Click 方法中沒有直接操作 UI 控制項。
※ 引述《xanlich (...)》之銘言:
: 在寫C# windows程式時, 假如說有兩個按扭事件
: 可以用下面的寫法, 使得按button1時, 也觸發button2_Click的事件, 如下:
: private void button1_Click(object sender, EventArgs e)
: {
: button2_Click(sender, e);
: }
: private void button2_Click(object sender, EventArgs e)
: {
: .
: .
: .
: }
: 但如果是用Threadpool執行的程式片段, 想呼叫button2_Click , 如下:
: ThreadPool.QueueUserWorkItem(new WaitCallback(ABC));
: 執行以下Thread:
: public void ABC(object p)
: {
: button2_Click(sender, e); <--這樣不行, 沒有sender跟e
: }
: 要怎樣才能在Thread裡去執行button2_Click? 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.71.99
推
05/22 23:40, , 1F
05/22 23:40, 1F
討論串 (同標題文章)