我正在编写代码以引发“长按鼠标右键”事件。
在线程池中创建了经过计时器的函数,新线程负责执行所有剩余的代码。但是我需要,计时器经过的函数应该完成其执行,并且应该将控制权返回给主线程,并且主线程应该继续执行剩余的代码。
当我使用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部分