同时使用2个线程的文件

时间:2016-11-03 14:21:14

标签: c# wpf

我目前正在编写一个应用程序,将某些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 +。**

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

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

1 个答案:

答案 0 :(得分:1)

我猜测ImagePathM1在您的GUI线程上处于活动状态,而这是另一个尝试访问事实上共享资源的线程中问题的根源。将ImagePathM1的值传递给辅助线程,而不是直接访问线程ImagePathM1