C#利用BackgroundWorker延迟执行

需求说明:edt文本输入框中连续输入文本,如果两次字符输入的间隔小于60毫秒,则不进行指定函数的触发,反之则触发指定函数。可用于判断条码枪输入或人工输入。

private BackgroundWorker _inputWorker = new BackgroundWorker();

//属性赋值和事件绑定
_inputWorker.WorkerReportsProgress = true;
_inputWorker.WorkerSupportsCancellation = true;
_inputWorker.DoWork += InputWorker_DoWork;
_inputWorker.ProgressChanged += InputWorker_ProgressChangedHandler;
_inputWorker.RunWorkerCompleted += InputWorker_RunWorkerCompletedHandler;


        private void InputWorker_DoWork(object sender, DoWorkEventArgs e) {
            if (!(sender is BackgroundWorker worker)) {
                return;
            }

            try {
                Thread.Sleep(60);
                if (!_inputWorker.CancellationPending)
                    worker.ReportProgress(0);
            } catch (Exception ex) {
                _log.Error("InputWorker_DoWork 发生异常", ex);
            }
        }

        private void InputWorker_ProgressChangedHandler(object sender, ProgressChangedEventArgs args) {
            if (_inTxtChngTimer)
                return;
            _inTxtChngTimer = true;
            try {
                 /*
                    要延迟执行的操作
                 */
            } finally {
                try {
                    _inputWorker?.CancelAsync();
                } catch { }
                _inTxtChngTimer = false;
            }
        }

        private void InputWorker_RunWorkerCompletedHandler(object sender, RunWorkerCompletedEventArgs args) {
                  //完成之后执行的操作,这里没啥操作,可以不写
        }


   //窗体的keydown事件,如果按下回车,则执行回车之后的操作,中断_inputWorker的操作
private void Frm_KeyUp(object sender, KeyEventArgs e) {
  if (e.KeyCode == Keys.Enter){
      if (_inputWorker.IsBusy)
                    _inputWorker?.CancelAsync();
  }
}


//相关编辑框的Txtchange事件
private void TxtCodeTextChanged(object obj) {
            _inputWorker?.CancelAsync();//先停止
            if (!string.IsNullOrEmpty(edt.Text.ToString()) && !_inputWorker.IsBusy) {
                _inputWorker.RunWorkerAsync(); //通过条件判断再开启
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值