我如何等待线程完成其工作然后执行下一个命令c#?

时间:2012-02-07 22:11:59

标签: c# multithreading synchronization wait

我有下面的代码(但不起作用)..我需要等到线程完成其工作然后执行然后下一个命令

private void btnPaste_Click(object sender, EventArgs e)
    {
        if (copiedItems != null)
        {
            if (copy)
            {
                System.Threading.Thread thPASTE = new System.Threading.Thread(PasteFromCopy);
                thPASTE.Start(currAddress);
                lock (this)
                {
                    btnRefresh_Click(sender, e);
                }
            }
            else
            {
                System.Threading.Thread thPASTE = new System.Threading.Thread(PasteFromMove);
                thPASTE.Start(currAddress);
                lock (this)
                {
                    btnRefresh_Click(sender, e);
                }
            }
        }
    }

粘贴应该做一些代码然后我应该刷新列表即时显示..我需要这样做,因为它在我调用线程刷新时不适合我 我该怎么办?

3 个答案:

答案 0 :(得分:5)

您可以在线程实例上使用Join方法,该方法将阻塞调用线程,直到另一个线程完成。

答案 1 :(得分:1)

您也可以使用WaitHandles并使用WaitOneWaitAll方法。

答案 2 :(得分:1)

i need to do it this way, because it doesn't work for me when i call the refresh in the thread

您的问题与JoinWaitWaitOne等线程同步无关。

  

从Windows窗体中的辅助线程更新用户界面元素很棘手,因为不允许辅助线程直接从表单或其任何子控件读取或写入属性值。存在此限制是因为Windows窗体中的表单对象和控件对象不是线程安全的。允许直接访问表单或其控件之一的属性值的唯一线程是主UI线程

要从线程(其他主线程)更新GUI,需要调用表单(或某些控件)的InvokeBeginInvoke方法将委托插入UI的Dispatcher中线程。

这些链接可以帮助您。

How to update GUI from another thread in C#?

Updating the UI from a Secondary Thread

Updating the GUI from another thread made easy