在C#中的MouseEvent(Click)之后继续

时间:2017-07-21 13:17:31

标签: c# mouseevent mouselistener mouseup

我希望我的应用程序等待鼠标点击然后继续。 我的申请基本上是这样的:

static class SomeClass {
   bool clicked = false;
   //some Code....

   //activate MouseUp Event & wait for mouse click
   _app.Application.MouseUp += MouseEventOnShape;

   //continue with the filled list after mouse click happened
   if(clicked) {
      //do something with list
   }
}

我的MouseEvent看起来像这样:

private static void MouseEventOnShape(int button, int keybuttonstate, double 
x, double y, ref bool canceldefault) {
   clicked = true;
   // some code to do and fill a list

}

但是,应用程序不会等待鼠标点击将bool设置为true。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

如果你想要某个类(实际上是它的方法)等待点击,你可能想要使用ManualResetEvent,这将暂停方法执行直到它被点击。但在这里,您必须关心阻止UI线程。请按原样尝试调用WaitForClick方法。如果您的应用程序完全冻结,则必须以其他方式调用它,例如在后台线程中。

参见示例:

private ManualResetEvent _waiter = new ManualResetEvent(false);

private void OnApplicationClick(object sender, EventArgs e)
{
    _waiter.Set();
}

private void WaitForClick()
{
    _app.Application.Click += OnApplicationClick;
    _waiter.WaitOne();
    // do something after click
}

编辑:您可以直接在事件处理程序中填写您的列表:

private void OnMouseUp(...)
{
    Invoke(new Action(() =>
    {
        // fill your list here
    }));
}

private void RegisterListener()
{
    _app.Application.MouseUp += OnMouseUp;
}