C# 异步线程生存期&;wpfui更新
在单击按钮时,我启动了对C# 异步线程生存期&;wpfui更新,c#,wpf,multithreading,task-parallel-library,C#,Wpf,Multithreading,Task Parallel Library,在单击按钮时,我启动了对StartContinuousThread的调用,该调用每秒钟都会对服务器进行轮询 public class ThreadsWindow { CancellationTokenSource wtoken = new CancellationTokenSource(); private void btnStartTest_Click(object sender, RoutedEventArgs e) { StartContinuous
StartContinuousThread
的调用,该调用每秒钟都会对服务器进行轮询
public class ThreadsWindow
{
CancellationTokenSource wtoken = new CancellationTokenSource();
private void btnStartTest_Click(object sender, RoutedEventArgs e)
{
StartContinuousThread();
}
void StartContinuousThread()
{
while(true)
{
var fact = Task.Factory.StartNew(() =>
{
CallServer();
Task.Delay(1000, wtoken.Token);
},
wtoken.Token);
}
}
}
StartContinuousThread
开始执行,但btnStartTest\u单击事件处理程序
完成其执行
StartContinuousThread方法
将如何在这种情况下更新UI
案子
我想知道StartContinuousThread
是否也使用事件处理程序终止,因为没有等待关键字用于重新加入
请帮忙 如果您的目标是每秒钟轮询一次服务器,那么您会遇到许多问题
Delay
创建任务,然后忽略它。您应该创建该任务的延续,以完成剩余的工作,实际上一秒钟内什么也不做private async Task StartContinuousThread(CancellationToken token)
{
while (true)
{
token.ThrowIfCancellationRequested();
await Task.Run(() => CallServer());
await Task.Delay(1000, token);
}
}
另一种可能性,特别是如果您使用的是旧版本的C#,则可能是使用计时器每秒运行一些代码
至于用户界面的更新;您可以在调用
任务之外的任何地方自由执行此操作。在本例中,请运行。在您的示例中,您需要使用某种机制封送回UI线程,例如捕获UI的同步上下文并发布到其中。该代码存在一些问题。。你到底想做什么?你想在CallServer
返回后更新UI线程吗?谢谢,请你解释一下如何编组回UI线程。btb我在这里发帖时错过了while loop。@lakshyaleader这是一个广泛讨论的话题,如果你想知道更多,你可以很容易地进行研究。