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

时间:2014-03-19 07:47:28

标签: c# multithreading

我有问题。我有以下代码。在第二行,我启动一个工作正常的线程但我的问题是在线程启动之前CloseQueueClient关闭。线程完成后是否可以运行CloseQueueClient(queueClient);?我试着等待然后它工作但整个Gui线程被阻止而Gui不会更新。

QueueClient queueClient = CreateQueueClient(queueName);
Task task = Task.Factory.StartNew(() => ReceiveMessagesFromQueue(queueClient));
CloseQueueClient(queueClient);

2 个答案:

答案 0 :(得分:3)

您需要的可能是延续

QueueClient queueClient = CreateQueueClient(queueName);
Task task = Task.Factory
    .StartNew(() => ReceiveMessagesFromQueue(queueClient))
    .ContinueWith(t => CloseQueueClient(queueClient));

上面的代码在任何线程上执行continuation。如果您需要使用UI线程,请使用FromCurrentSynchronizationContext

显式TaskScheduler
task.ContinueWith(t => CloseQueueClient(queueClient),
    TaskScheduler.FromCurrentSynchronizationContext());

答案 1 :(得分:1)

尝试这样做:

QueueClient queueClient = CreateQueueClient(queueName);
Task task = Task.Factory.StartNew(() => 
            {
                ReceiveMessagesFromQueue(queueClient);
                CloseQueueClient(queueClient);
            });
相关问题