我目前正在编写一个应用程序,将某些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 +。**
我想这是因为正在显示的文件和文件具有相同的名称,程序无法更改或覆盖正在使用的文件!
你能帮我解决这个问题???
答案 0 :(得分:1)
我猜测ImagePathM1
在您的GUI线程上处于活动状态,而这是另一个尝试访问事实上共享资源的线程中问题的根源。将ImagePathM1
的值传递给辅助线程,而不是直接访问线程ImagePathM1
。