<分区>
我正在开发一个 WPF
客户端应用程序。这个应用程序定期向 webservice
发送数据。当用户登录到应用程序时,我希望每 5 mts 运行一次特定方法以将数据发送到 .asmx
服务。
我的问题是我是否需要使用线程或计时器。此方法的执行应该在用户与应用程序交互时发生。 即在此方法执行期间不阻塞 UI
有什么资源可以找吗?
<分区>
我正在开发一个 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# - 如何使用线程或计时器从 WPF 客户端应用程序定期执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14296644/