C# 两个线程同时使用一个文件

C# 两个线程同时使用一个文件,c#,wpf,C#,Wpf,我目前正在编写一个应用程序,将某些Excel文件的某些数据区域作为图像文件导出到图像文件夹,然后显示它们。 程序还应能够在文件显示期间更新所有文件(包括这些文件) 问题: ExportRangeAsImage()方法将Excel文件的数据区域导出为图像文件,该方法在后台工作程序中调用,该工作程序在同一类(ViewModel)中实现。 如果文件的更新在同时显示时运行,则会出现以下错误: // ExportRangeAsImage() { ... System.Windows.Applica

我目前正在编写一个应用程序,将某些Excel文件的某些数据区域作为图像文件导出到图像文件夹,然后显示它们。 程序还应能够在文件显示期间更新所有文件(包括这些文件)

问题:

ExportRangeAsImage()方法将Excel文件的数据区域导出为图像文件,该方法在后台工作程序中调用,该工作程序在同一类(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”的未处理异常 System.Drawing.dll其他信息:中发生一般错误 GDI+**

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


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

我推测
ImagePathM1
在你的GUI线程上处于活动状态,这是另一个试图访问实际共享资源的线程出现问题的根源。将
ImagePathM1
的值传递给次线程,而不是让线程直接访问
ImagePathM1
引用

如果您担心这个问题,那么解决方案是:在每个线程中使用不同的文件名。哇!我们还能为你做些什么?这与文件无关。这个错误显然是关于UI@PanagiotisKanavos我很抱歉,你就是这样。当然也可能是这样。问题已经解决:)!