如何在C#中等待线程完成?

我创build了两个线程来获取一个表和一个函数ExcelSave(DataTable, nameofSheetinExcel)来保存所有的DataTable到基于Thread的名字的Excel。

我想等待第一个线程保存完成,并转到第二个线程保存。

我创build了两个线程:

 var t1 = new Thread(new ThreadStart(RegisterInfo)) { Name = "Thread1" }; t1.Start(); var t2 = new Thread(new ThreadStart(RegisterInfo)) { Name = "Thread2" }; t2.Start(); t1.Join(); t2.Join(); 

我的代码保存文件excel是这样的:

 if (Thread.CurrentThread.Name == "Thread1") ExcelSave(dt, "Thread 1"); else ExcelSave(dt, "Thread 2"); 

因为我有例外:

保存文件时出错,因为进程无法访问文件“D:\ lapproject \ bin \ Debug \ data.xlsx”,因为另一个进程正在使用它。 System.Exception {System.IO.IOException}`

有任何方法可以避免这种情况? 感谢所有人。

您可以使用以下方法来防止multithreading同时访问共享资源,并且会pipe理您的错误。

  1. 使用互斥类来处理代码:

     private readonly Mutex m = new Mutex(); public void ThreadSafeMethod() { m.WaitOne(); try { /*excel related critical code */ } finally { m.ReleaseMutex(); } } 
  1. 使用locking方法:

     private readonly object syncLock = new object(); public void ThreadSafeMethod() { lock(syncLock) { /*excel related critical code */ } }