线程完成后执行最后一条语句

本文关键字:最后 一条 语句 执行 线程 | 更新日期: 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);
            });