我创建了两个线程来获取一个表和一个函数ExcelSave(DataTable, nameofSheetinExcel)
,以基于Thread的名称将所有DataTable保存到Excel。
我想等待第一个线程保存完成并转到第二个线程进行保存。
我创建了两个帖子:
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}`
有什么方法可以避免这种情况吗?感谢所有人。
答案 0 :(得分:1)
您可以使用以下方法阻止多个线程同时访问共享资源,它将管理您的错误。
使用mutex类来处理代码:
private readonly Mutex m = new Mutex();
public void ThreadSafeMethod() {
m.WaitOne();
try {
/*excel related critical code */
} finally {
m.ReleaseMutex();
}
}
使用锁定方法:
private readonly object syncLock = new object();
public void ThreadSafeMethod() {
lock(syncLock) {
/*excel related critical code */
}
}