Как объединить прошедшую функцию таймера с основным потоком? - PullRequest
0 голосов
/ 15 июня 2019

Я пишу код для вызова события «Нажатие правой кнопки мыши долго».

Функция истекшего таймера создается в пуле потоков, а новый поток выполняет весь оставшийся код. Но мне нужно, чтобы истекшая функция таймера завершила свое выполнение и вернула управление основному потоку, а основной поток должен продолжить выполнение оставшегося кода.

Когда я использую файл 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.
  }
 }
}

Секция комментариев выполняется потоком по истечении таймера. Мне нужно, чтобы основной поток выполнял раздел КОММЕНТАРИИ

...