微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在开发一个 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
}

原文地址:https://www.jb51.cc/csharp/94348.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐