如何在主线程中加入计时器经过的函数?

时间:2019-06-15 18:05:24

标签: c# multithreading timer task

我正在编写代码以引发“长按鼠标右键”事件。

在线程池中创建了经过计时器的函数,新线程负责执行所有剩余的代码。但是我需要,计时器经过的函数应该完成其执行,并且应该将控制权返回给主线程,并且主线程应该继续执行剩余的代码。

当我使用task.Task.Result时,我的程序陷入困境,正在等待计时器到期,然后继续。

   private Task<bool> MouseRightButtonHold(int controlEvent)
    {
       System.Timers.Timer _timer = new System.Timers.Timer();
       TaskCompletionSource<bool> task = new TaskCompletionSource<bool>();
        _timer.Interval = 500;

        mouseKeyUpHandler = delegate (object senderIn, RemoteMouseEventArgs argsIn)
        {
            _timer.Stop();
            task.SetResult(false);
        };

        AddHandler(controlEvent, mouseKeyUpHandler);

        _timer.Elapsed += delegate {
            _timer.Stop();
            task.SetResult(true);
        };

        _timer.Start();
        return task.Task;
    } 
public static int main()
{
 if(eventArgs.Button == MouseButtons.Right && eventArgs.Clicks == 1)
 {
  eventArgs.IsLongPress = await MouseRightButtonDown((int)ControlEvent.MouseSingleUp);
  RemoveHandler((int)ControlEvent.MouseSingleUp, mouseKeyUpHandler);
  if(eventArgs.IsLongPress == true)
  {
     //main thread should execute the code not by the thread pool thread.
  }
 }
}

当计时器经过时,注释部分正在由线程执行。我需要主线程执行COMMENT部分

0 个答案:

没有答案