加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用线程或定时器从WPF客户端应用程序定期执行方法[已

发布时间:2020-12-15 06:52:05 所属栏目:百科 来源:网络整理
导读:我正在开发一个 WPF客户端应用程序.该应用程序定期向webservice发送数据.当用户登录到应用程序时,我希望每5 mts运行一些特定的方法来发送数据到.asmx服务. 我的问题是我是否需要使用线程或定时器.这种方法执行应该发生在用户与应用程序交互时. 即在该方法执
我正在开发一个 WPF客户端应用程序.该应用程序定期向webservice发送数据.当用户登录到应用程序时,我希望每5 mts运行一些特定的方法来发送数据到.asmx服务.

我的问题是我是否需要使用线程或定时器.这种方法执行应该发生在用户与应用程序交互时.
即在该方法执行期间不阻塞UI

任何资源寻找?

解决方法

我将推荐使用新的async / await关键字的System.Threading.Tasks命名空间.
// The `onTick` method will be called periodically unless cancelled.
private static async Task RunPeriodicAsync(Action onTick,TimeSpan dueTime,TimeSpan interval,CancellationToken token)
{
  // Initial wait time before we begin the periodic loop.
  if(dueTime > TimeSpan.Zero)
    await Task.Delay(dueTime,token);

  // Repeat this loop until cancelled.
  while(!token.IsCancellationRequested)
  {
    // Call our onTick function.
    onTick?.Invoke();

    // Wait to repeat again.
    if(interval > TimeSpan.Zero)
      await Task.Delay(interval,token);       
  }
}

那么你可以在某处调用这个方法:

private void Initialize()
{
  var dueTime = TimeSpan.FromSeconds(5);
  var interval = TimeSpan.FromSeconds(5);

  // TODO: Add a CancellationTokenSource and supply the token here instead of None.
  RunPeriodicAsync(OnTick,dueTime,interval,CancellationToken.None);
}

private void OnTick()
{
  // TODO: Your code here
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读