我正在开发一个
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 举报,一经查实,本站将立刻删除。