C# · 12月 30, 2021

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}