Я пишу код для вызова события «Нажатие правой кнопки мыши долго».
Функция истекшего таймера создается в пуле потоков, а новый поток выполняет весь оставшийся код. Но мне нужно, чтобы истекшая функция таймера завершила свое выполнение и вернула управление основному потоку, а основной поток должен продолжить выполнение оставшегося кода.
Когда я использую файл 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.
}
}
}
Секция комментариев выполняется потоком по истечении таймера. Мне нужно, чтобы основной поток выполнял раздел КОММЕНТАРИИ