如何解决如何延迟运行一个方法,在延迟期间异步,但在方法运行时同步
背景:
我有一个类似网格的 UI 控件,用户可以像 Excel 一样导航它。每当用户导航到新单元格时,控件的 SelectionChange(Cell target)
事件都会触发。我与 MyHandler(Cell target)
一起参与了这个活动。此处运行的代码旨在同步运行并将 UI 锁定约 1/2 秒。这里的问题是用户喜欢扫描网格以找到他们真正想要处理的单元格。现在,每次他们移动单元格时,这个过程都会启动并阻止用户流畅地移动到他们想要的单元格。
public class MyClass
{
private WSControl _worksheet;
public MyClass (WSControl ws)
{
_worksheet = ws;
_worksheet.SelectionChange += MyHandler;
}
private void MyHandler(Cell target)
{
//do stuff with the target
}
}
我被困的地方:
然而,我想要做的是延迟我的处理程序异步运行几毫秒。对用户的影响是他们可以在网格中导航(例如使用箭头键),并且在他们最终“着陆”在单元格上之前不会开始对 SelectionChange 的处理。
我的第一个想法是使用 Timer
并将 MyHandler(Cell target)
挂接到 Elapsed
事件。然后我会在控制的 SelectionChange
事件中启动/停止计时器。当计时器最终被允许完成时,它会调用我的处理程序。但是,我无法真正干净地将所需的 Cell target
参数传递给 MyHandler
。
public class MyClass
{
private Timer _timer;
private WSControl _worksheet;
public MyClass (WSControl ws)
{
_worksheet = ws;
_worksheet.SelectionChange += StartTheTimer;
_timer = new Timer(200);
_timer.Elapse += MyHandler; //but now how do I get the Cell target paramerter to MyHandler
}
private void StartTheTimer(Cell target)
{
if (_timer.Enabled)
{
_timer.Stop();
}
_timer.Start();
}
private void MyHandler(object sender,EventArgs e)
{
_timer.Enabled = false;
//do stuff but I need the Cell from the original event :-(
}
}
我的第二个想法是某种具有延迟和取消的任务来完成此任务。但是我不太确定如何让任务异步延迟但同步执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。