如何等待线程完成其任务,然后执行下一个命令c#?

如何等待线程完成其任务,然后执行下一个命令c#?,c#,multithreading,synchronization,wait,C#,Multithreading,Synchronization,Wait,我有下面的代码(但不工作)。。我需要等待线程完成其任务,然后执行下一个命令 private void btnPaste_Click(object sender, EventArgs e) { if (copiedItems != null) { if (copy) { System.Threading.Thread thPASTE = new System.Threading.

我有下面的代码(但不工作)。。我需要等待线程完成其任务,然后执行下一个命令

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);
                }
            }
        }
    }
粘贴应该做一些代码,然后我应该刷新我显示的列表。。我需要这样做,因为当我在线程中调用刷新时,它对我不起作用

如何执行此操作???

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

您也可以使用或方法。

我需要这样做,因为在线程中调用刷新时它对我无效。

您的问题与线程同步无关,例如
Join
Wait
WaitOne

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

要从线程(主线程除外)更新GUI,需要调用窗体(或某些控件)的
Invoke
BeginInvoke
方法,将委托插入UI线程的调度程序

这些链接可以帮助您


您可能还想考虑一个私有锁定变量,而不是在代码< > < <代码>上加锁。e、 例如,
private readonly object lockObject=new object()您可以查看此线程以了解更多详细信息启动线程并等待它是没有意义的。您也可以直接调用PasteFromCopy()