Visual C++/CLRでの描画とマルチスレッドのこと
Visual C++によるドットネット・プログラミングにおける描画およびマルチスレッドの場合に起こる問題として、描画が途中でできなくなること、およびマルチスレッドのスレッドを増やした場合にCOMに関わる処理の問題が生起することがある。これらについて、以下のように対応することができる。
描画について
ドットネットプログラミングでの描画はGraphics型のオブジェクトによってできる。例えば、以下のようにオブジェクトを用意する。
pictureBox1->Image = gcnew Bitmap( pw, ph );
Graphics ^ g = Graphics::FromImage(pictureBox1->Image);
上の場合、Graphics型のオブジェクトgによりpictureBox1 上に描画が行われるが、描画処理の間に少し計算処理が入ったりすると、以後の描画が画面に反映されなくなることがある。このときは、計算処理後のgによる描画の前に、例えば上の場合は次のように
pictureBox1->Image = pictureBox1->Image;
pictureBox1のImageコンポーネントへの代入操作を行っておくと、gによる描画処理が画面に反映される。
マルチスレッドについて
Visual C++/CLRによるマルチスレッド・プログラミングのときに、実行の途中でCOMの処理に関する問題が生起することがある。多数のスレッドの処理の進行状況を、各スレッドに付けたフォーム上でのRichTextBoxコンポーネントにリアルタイムで表示させるようにしておくと、スレッドの数が多いときCOMの処理に関わる問題がスレッドの実行の途中で生じることがある。この場合は、RichTextBoxにおける表示を例えばLabelによる表示に置き換えるとCOMの処理の問題は起こらなくなる。
なお、Visual C++によるドットネットプログラミング入門の解説は<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>で行っている。
また、Visual C++ 2012/CLRによるWindowsフォームアプリケーションの作成についての簡単な説明をhttp://y-okamoto-psy1949.la.coocan.jp/booksetc/introvcpp/vs2012FormApp/に用意している。