看板 C_Sharp 關於我們 聯絡資訊
可能是我講得太簡化了,不過從別的執行緒使用 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
xanlich:我button2裡有操作UI,你講的可以run,但碰到操作UI會無效 05/22 23:40