C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: マルチスレッドでFormを表示する方法


(過去ログ 140 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■82313 / inTopicNo.1)  マルチスレッドでFormを表示する方法
  
□投稿者/ vista (1回)-(2017/01/01(Sun) 17:11:04)

分類:[.NET 全般] 


VBを使用しています。

シングルスレッドの場合には


Dim frm90 As New Form90
Form90.Show()

でフォームを表示することができるのですが
マルチスレッドにしてバックグラウンドから上記のコードで
フォームを呼び出そうとしても

InvalidOperatoinExceptionはハンドルされませんでした。

DragDrop登録は成功しませんでした。

というエラーが出て表示されません。

これは一体なぜでしょうか?


引用返信 編集キー/
■82315 / inTopicNo.2)  Re[1]: マルチスレッドでFormを表示する方法
□投稿者/ Azulean (756回)-(2017/01/01(Sun) 17:54:31)
2017/01/01(Sun) 17:56:21 編集(投稿者)

基本的に Windows Forms ではメインスレッド以外からのコントロール・フォームの作成や操作は想定されていません。
バックグラウンドスレッドから直接表示するのではなく、メインスレッドに依頼(Invoke, BeginInvoke など)する形にできませんか?


// 一応、自分で Thread を生成し、SetApartmentState で Sta にすれば例外は回避できます。
// ただし、前述のように想定されていないシナリオで使うことになるので自己責任で。
引用返信 編集キー/
■82316 / inTopicNo.3)  Re[2]: マルチスレッドでFormを表示する方法
□投稿者/ なちゃ (149回)-(2017/01/01(Sun) 20:16:29)
.NETのWindowsFormsの仕組み的には、自分で明示的にスレッド作成&STAに設定してマルチスレッドで複数メッセージスレッドを利用する事に、特別な制限はないと思いますが、サードパーティ性のライブラリなどでは問題が発生するものがあるので、一応注意が必要です。
例えばグレープシティのコンポーネントなんかでは問題が発生します。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -