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 +。* *

我猜这是因为正在显示的文件和文件具有相同的名称,程序不能更改或覆盖正在使用的文件!

你能帮我解决这个问题吗?

2个线程同时使用一个文件

我猜测ImagePathM1在您的GUI线程上是活动的,这是试图访问事实上的共享资源的另一个线程中问题的根源。将ImagePathM1的值传递给二级线程,而不是让线程直接访问ImagePathM1引用。