2015年6月29日月曜日

System.Drawing.Graphicsのマルチスレッド非対応問題

Graphics.DrawImageはマルチスレッド対応していない。

http://tiltcorrector.seesaa.net/article/249984715.html



この時点でも驚愕の情報なんですが、DrawImageとDrawStringが並列処理でかちあうと例外が飛んでくるようなのです。Paintイベント時のGraphicsと、ビットマップから取り出したGraphicsでどこにかち合う要素があるのか全くわからないのですが。本当に、本当におかしなライブラリですWindows.Formsは。昔使ってた時は簡単にいろんなことが出来るなあと思いましたが、複雑なことは出来ないようです。複雑なことに使ったことがなかったので気付かなかったのですが、本当に全く困りました。これでは満足なパフォーマンスが出せそうにありません。

まあWinForm版はパイロット版という位置づけに自分の中でいつの間にか変わっていたので、パフォーマンスがそこまででなくてもいいような気もしますけれど。

しかも「InvalidOperationException オブジェクトは現在他の場所で使用されています」という例外で、MSDNにも記述がない上、私はいつも例外スロー時点でデバッグ中断する設定なのですが、InvalidOperationExceptionではあまりにも一般的すぎて例外スロー中断の例外に設定するわけにもいきません(結局設定しました。自分で投げてたInvalidOperationExceptionは全部他の例外に変えました。もっといい方法がないものでしょうか)

0 件のコメント:

コメントを投稿