我可以将鼠标事件处理程序放在单独的线程上吗?

时间:2011-03-02 10:24:13

标签: c# .net multithreading mouseevent event-handling

我可以在鼠标事件处理程序上添加一个线程吗?

Calls_Calls.MouseUp += new MouseEventHandler(Calls_Calls_MouseUp);

如何在此处添加线程?

3 个答案:

答案 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

相关问题