线程完成后执行最后一条语句
本文关键字:最后 一条 语句 执行 线程 | 更新日期: 2023-09-27 17:50:51
我有一个问题。我有以下代码。在第二行我开始一个线程,它工作得很好,但我的问题是,CloseQueueClient
关闭之前,线程开始。是否可以在线程完成后运行CloseQueueClient(queueClient);
?我尝试了等待,然后它的工作,但整个Gui线程被阻塞,Gui不更新。
QueueClient queueClient = CreateQueueClient(queueName);
Task task = Task.Factory.StartNew(() => ReceiveMessagesFromQueue(queueClient));
CloseQueueClient(queueClient);
你需要的可能是一个延续:
QueueClient queueClient = CreateQueueClient(queueName);
Task task = Task.Factory
.StartNew(() => ReceiveMessagesFromQueue(queueClient))
.ContinueWith(t => CloseQueueClient(queueClient));
上面的代码在任意线程上执行延续。如果您需要使用UI线程,请使用FromCurrentSynchronizationContext
:
TaskScheduler
task.ContinueWith(t => CloseQueueClient(queueClient),
TaskScheduler.FromCurrentSynchronizationContext());
试试这样做:
QueueClient queueClient = CreateQueueClient(queueName);
Task task = Task.Factory.StartNew(() =>
{
ReceiveMessagesFromQueue(queueClient);
CloseQueueClient(queueClient);
});