C# 异步等待计时器。勾选
我目前正在使用async await扩展WinForms应用程序 MainForm正在等待一些条形码扫描输入,并对MainForm_KeyDown事件作出反应 为了避免用户在键盘上输入一些废话而导致真正的扫描失败,我实现了一个计时器,它在300毫秒内清除ScanInput字符串 我想展示一些实现片段:C# 异步等待计时器。勾选,c#,events,timer,async-await,C#,Events,Timer,Async Await,我目前正在使用async await扩展WinForms应用程序 MainForm正在等待一些条形码扫描输入,并对MainForm_KeyDown事件作出反应 为了避免用户在键盘上输入一些废话而导致真正的扫描失败,我实现了一个计时器,它在300毫秒内清除ScanInput字符串 我想展示一些实现片段: public SomeCtor() { _timer = new Timer(){ Interval = 300 }; _timer.Tick +
public SomeCtor()
{
_timer = new Timer(){ Interval = 300 };
_timer.Tick += timer_Tick;
}
void timer_Tick(object sender, EventArgs e)
{
ScanInput = String.Empty;
}
private async void MainForm_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Enter:
await OnScanBarcodeAsync(ScanInput);
break;
}
_timer.Stop();
_timer.Start();
}
现在我的问题是:
我是否可能会遇到由计时器引起的这种实现的异步等待问题?顺便说一句,应用程序的可测试性非常差。我认为您可能对此有问题。最有可能的是,条形码扫描仪每次都会吐出一个字符,所以有一个机会,计时器会在数字的中间清除合法的输入。是的,你是对的。扫描仪像人一样打字,但速度和复制粘贴过程一样快。但这将是一个基本的编码问题,而不是异步等待问题。(如果出现这种情况,我可以增加计时器)。我认为你最好的选择是根本不要干扰用户输入;所有条形码扫描仪都像“键盘”,所以任何使用条形码的人都知道在扫描的同时不要弄坏键盘。这还允许用户手动键入代码,以防无法读取。在一个勇敢的世界里,你可能是对的。但排除用户故障应该更好!没有手动输入条形码的选项。