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