2016-11-03 3 views
1

現在、一部のExcelファイルの特定のデータ領域をイメージファイルとしてイメージフォルダにエクスポートして表示するアプリケーションを作成しています。 また、プログラムは、ファイルの表示中にすべてのファイル(これらを含む)を更新することができます。ファイルを2つのスレッドで同時に使用する

問題:

画像ファイルにExcelファイルのデータ領域をエクスポートExportRangeAsImage()メソッドは、同じクラス(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); 
      } 
     })); 

An unhandled exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll Additional information: A generic error occurred in GDI+.**

私が表示されているファイルとファイルが持っているので、それはあると思います。それは同時に表示されている間、ファイルの更新が実行された場合 は、私は次のエラーを取得します同じ名前とプログラムは、使用中のファイルを変更したり上書きすることはできません!

この問題を解決するのに役立ちますか?

+1

それが懸念される場合、解決策は、各スレッドで異なるファイル名を使用することです。うわー!他にどうすればあなたを助けることができますか? –

+0

これはファイルとは関係ありません。エラーは明らかにUIについてです。 –

+0

@PanagiotisKanavos私は[かなり確信しています](http://stackoverflow.com/questions/27438058/image-save-method-is-not-save-image-gdi-error-occured) [チャンス](http://stackoverflow.com/questions/15862810/a-generic-error-occured-in-gdi-in-bitmap-save-method)はかなり高いです(http:// stackoverflow。 [ファイルとマルチスレッド](http://stackoverflow.com/q/7694741/6682181)(http://stackoverflow.com/q/29973934/6682181)と[行う必要がある](com/q/5813633/6682181) )。もちろん、[ファイル形式](http://stackoverflow.com/q/1053052/6682181)でもかまいません。 – haindl

答えて

1

あなたのGUIスレッドでImagePathM1がアクティブであり、それがdefacto共有リソースにアクセスしようとしている他のスレッドの問題の根源だと推測しています。スレッドImagePathM1の参照に直接アクセスするのではなく、ImagePathM1の値をセカンダリスレッドに渡します。

+0

問題は修正されました:)! – Guilian

関連する問題