作者hamsters (hamster)
看板C_Sharp
标题Re: [问题] 有关thread的问题
时间Thu May 22 20:07:47 2008
可能是我讲得太简化了,不过从别的执行绪使用 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
1F:推 xanlich:我button2里有操作UI,你讲的可以run,但碰到操作UI会无效 05/22 23:40