我可以在鼠标事件处理程序上添加一个线程吗?
Calls_Calls.MouseUp += new MouseEventHandler(Calls_Calls_MouseUp);
如何在此处添加线程?
答案 0 :(得分:3)
我会以相同的方式设置事件处理程序,但在Calls_Calls_MouseUp
方法中,您可以启动一个线程来完成工作:
private void Calls_Calls_MouseUp(object sender, MouseEventArgs e)
{
ThreadPool.QueueUserWorkItem(state => {
// do the work here
});
}
但是,我通常会尝试尽可能不知道我的事件处理程序,只是调用其他方法,通常基于某些条件:
private void Calls_Calls_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
DoSomething();
}
}
private void DoSomething()
{
ThreadPool.QueueUserWorkItem(state => {
// do the work here
});
}
这使您能够从某个控件上的MouseUp
事件以外的其他内容触发完全相同的行为(这样您就可以在菜单项,工具栏按钮和可能的常规操作上具有相同的行为命令按钮)。它还可以开启对功能进行单元测试的可能性(即使使用异步代码有点棘手)。
答案 1 :(得分:1)
Calls_Calls.MouseUp+= new MouseEventHandler(delegate(System.Object o, System.EventArgs e) { new Thread(Calls_Call_MouseUp).Start(); });
应该适合你。如果你得到括号错误,请修改它们,因为我手写代码:):)
答案 2 :(得分:1)
如果您需要在UI上进行任何更新以进行进度和完成,您还可以使用BackgroundWorker。