作成日: 2021/01/12 最終更新日: 2021/02/17
文書種別
不具合
状況
修正済み
詳細
マルチスレッド環境においてフォント取得処理が実行されると、InvalidOperationExceptionが発生することがあります。
この問題は、処理中に使用する静的コレクションがスレッドセーフな実装になっていないために発生します。
この問題は、処理中に使用する静的コレクションがスレッドセーフな実装になっていないために発生します。
回避方法
この問題はバージョン4.0.3で修正されました。
※修正版を適用しない場合の回避方法は以下の通りです。
下記の方法により、マルチスレッドで実行した際に問題が生じる可能性を低くすることができます。(※完全な回避策ではありません)
新規のメソッドとして、下記のコードにある通りの内容をそのまま別途実装し、問題となるマルチスレッド処理が実行される前段階で、このメソッドを1回呼び出してください。(スレッドごとに呼び出す必要はございません。)
--------------------------------------
using System.Reflection; //名前空間
・・・
private static void Workaround()
{
var workbook = new Workbook();
PropertyInfo[] props = typeof(Themes).GetProperties(BindingFlags.Public | BindingFlags.Static);
foreach (var prop in props)
{
var value = prop.GetValue(null);
}
}
※修正版を適用しない場合の回避方法は以下の通りです。
下記の方法により、マルチスレッドで実行した際に問題が生じる可能性を低くすることができます。(※完全な回避策ではありません)
新規のメソッドとして、下記のコードにある通りの内容をそのまま別途実装し、問題となるマルチスレッド処理が実行される前段階で、このメソッドを1回呼び出してください。(スレッドごとに呼び出す必要はございません。)
--------------------------------------
using System.Reflection; //名前空間
・・・
private static void Workaround()
{
var workbook = new Workbook();
PropertyInfo[] props = typeof(Themes).GetProperties(BindingFlags.Public | BindingFlags.Static);
foreach (var prop in props)
{
var value = prop.GetValue(null);
}
}
旧文書番号
86317