DOBON.NETプログラミング掲示板過去ログ
フォームのコントロールを別スレッドに渡したい
題名: フォームのコントロールを別スレッドに渡したい
著者: 斉藤 昇
日時: 2006/10/08 14:20:08
ID: 17840
この記事の返信元:
(なし)
この記事への返信:
[17900]
Re[1]: フォームのコントロールを別スレッドに渡したい
エツ
2006/10/16 10:45:27
ツリーを表示
環境/言語:[C#]
分類:[.NET]
フォームのリストボックスを別スレッドで更新する場合、本サイトのサンプル
を参考にしてうまくいきました。(フォームの記述とスレッドの記述が同じファイル)
が、スレッドの記述を別ファイル(.cs)にする場合
はスレッドにリストボックスコントロールを教えてやる必要があると思い、
スレッドファイル内に
public System.Windows.Forms.ListBox dateListBox1;
//デリゲートの宣言
public delegate void myDrawDelegate();
myDrawDelegate Mydlg;
に記述し、
フォーム側で
スレッドのインスタンス(myThread)をつくり
myThread.dateListBox1 = listBox1;
でセットし、スレッド起動しました。
ところがリストボックスを書き換えるモジュールで
if (dateListBox1.InvokeRequired)
の部分で実行時にスタックオーバーフローが起きて
うまくいきません。
他に方法がありますか?
題名: Re[1]: フォームのコントロールを別スレッドに渡したい
著者: エツ
日時: 2006/10/16 10:45:27
ID: 17900
この記事の返信元:
[17840]
フォームのコントロールを別スレッドに渡したい
斉藤 昇
2006/10/08 14:20:08
この記事への返信:
(なし)
ツリーを表示
2006/10/16(Mon) 10:54:27 編集(投稿者)
■No17840に返信(斉藤 昇さんの記事)
こんにちは エツです。
フォームのコントロールをスレッドから更新する場合は Invoke を使用して
更新します。
この場合、「スレッドにコントロールを渡す」というより、「コントロールのあるスレッドに一時的に制御を移して更新し、再びスレッドに戻る」というイメージです。
> フォームのリストボックスを別スレッドで更新する場合、本サイトのサンプル
> を参考にしてうまくいきました。(フォームの記述とスレッドの記述が同じファイル)
参考にしたサンプルが判らないので何ともいえませんが、うまくいったのなら
> が、スレッドの記述を別ファイル(.cs)にする場合...
これでもうまくいくと思いますが?
違う点は別ファイルなので 参照、スコープ、名前空間、クラス名、インスタンス、等を
適当に修正する必要があると思います。
以下の方法につきましては、必要かどうか私にはわかりませんので
コメントは控えさせて、頂きます。
> はスレッドにリストボックスコントロールを教えてやる必要があると思い、
> スレッドファイル内に
>
> public System.Windows.Forms.ListBox dateListBox1;
> //デリゲートの宣言
> public delegate void myDrawDelegate();
> myDrawDelegate Mydlg;
> に記述し、
>
> フォーム側で
> スレッドのインスタンス(myThread)をつくり
> myThread.dateListBox1 = listBox1;
> でセットし、スレッド起動しました。
>
> ところがリストボックスを書き換えるモジュールで
> if (dateListBox1.InvokeRequired)
> の部分で実行時にスタックオーバーフローが起きて
> うまくいきません。
>
> 他に方法がありますか?
>
>
#私もデザインモードで作成したフォームのリストボックスにスレッドで作成した文字列を
スレッドからリストボックスに追加しましたが、上手く追加できます。
但しこれは同一クラスのリストボックスとスレッドの場合です。
別クラスでは試していません。
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
フォームのリストボックスを別スレッドで更新する場合、本サイトのサンプル
を参考にしてうまくいきました。(フォームの記述とスレッドの記述が同じファイル)
が、スレッドの記述を別ファイル(.cs)にする場合
はスレッドにリストボックスコントロールを教えてやる必要があると思い、
スレッドファイル内に
public System.Windows.Forms.ListBox dateListBox1;
//デリゲートの宣言
public delegate void myDrawDelegate();
myDrawDelegate Mydlg;
に記述し、
フォーム側で
スレッドのインスタンス(myThread)をつくり
myThread.dateListBox1 = listBox1;
でセットし、スレッド起動しました。
ところがリストボックスを書き換えるモジュールで
if (dateListBox1.InvokeRequired)
の部分で実行時にスタックオーバーフローが起きて
うまくいきません。
他に方法がありますか?