2个线程同时使用一个文件
本文关键字:一个 文件 线程 2个 | 更新日期: 2023-09-27 18:16:04
我目前正在编写一个应用程序,将一些Excel文件的某些数据区域作为图像文件导出到图像文件夹,然后显示它们。程序还应该能够在显示文件期间更新所有文件(包括这些文件)。
问题:
导出Excel文件的数据区域到图像文件的ExportRangeAsImage()方法在后台worker中被调用,它在同一个类(ViewModel)中实现。如果一个文件的更新在同时显示的同时运行,我得到以下错误:
// ExportRangeAsImage() {
...
System.Windows.Application.Current.Dispatcher.BeginInvoke(
DispatcherPriority.Normal, new System.Action(() =>
{
Bitmap image = new Bitmap(System.Windows.Forms.Clipboard.GetImage());
if (!file.Contains("XYZ"))
{
//The program stops here
image.Save(ImagePathM1 + Path.GetFileNameWithoutExtension(file) + ".svg"); Marshal.ReleaseComObject(ExcelApp);
}
}));
类型为"System.Runtime.InteropServices"的未处理异常。ExternalException'发生在dll附加信息:在GDI +。* *
我猜这是因为正在显示的文件和文件具有相同的名称,程序不能更改或覆盖正在使用的文件!
你能帮我解决这个问题吗?我猜测ImagePathM1
在您的GUI线程上是活动的,这是试图访问事实上的共享资源的另一个线程中问题的根源。将ImagePathM1
的值传递给二级线程,而不是让线程直接访问ImagePathM1
引用。