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

前端之家收集整理的这篇文章主要介绍了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
}

猜你在找的C#相关文章