C# 异步等待计时器。勾选

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 +

我目前正在使用async await扩展WinForms应用程序

MainForm正在等待一些条形码扫描输入,并对MainForm_KeyDown事件作出反应

为了避免用户在键盘上输入一些废话而导致真正的扫描失败,我实现了一个计时器,它在300毫秒内清除ScanInput字符串

我想展示一些实现片段:

    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();
    }
现在我的问题是:
我是否可能会遇到由计时器引起的这种实现的异步等待问题?顺便说一句,应用程序的可测试性非常差。

我认为您可能对此有问题。最有可能的是,条形码扫描仪每次都会吐出一个字符,所以有一个机会,计时器会在数字的中间清除合法的输入。是的,你是对的。扫描仪像人一样打字,但速度和复制粘贴过程一样快。但这将是一个基本的编码问题,而不是异步等待问题。(如果出现这种情况,我可以增加计时器)。我认为你最好的选择是根本不要干扰用户输入;所有条形码扫描仪都像“键盘”,所以任何使用条形码的人都知道在扫描的同时不要弄坏键盘。这还允许用户手动键入代码,以防无法读取。在一个勇敢的世界里,你可能是对的。但排除用户故障应该更好!没有手动输入条形码的选项。