• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:別スレッドからのフォームのテキストボックス参照(VB))

VisualBasic初心者のための別スレッドからのテキストボックス参照方法

このQ&Aのポイント
  • VisualBasicの初心者が別スレッドからテキストボックスを参照する方法について教えてください。
  • 別スレッドからスタートアップフォームのテキストボックスを参照すると、値が正しく表示されない問題が発生します。
  • VisualBasic.NET 2008の環境で、別スレッドからテキストボックスの値を参照する方法をご教示願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Delegateを使ってワーカーとメインの橋渡しをしましょう フォームクラスに Delegate Sub myGetText( ByRef sb as System.Text.StringBuilder) Delegate Sub mySetText( ByVal ss as String) を定義しておきます バックグランドワーカーからTextBox1へのアクセスするために以下の2つを定義します Public Sub GetText( byRef sb as System.Text.StringBuilder)   if TextBox1.InvokeRequired then     ' バックグランドワーカーから呼ばれた場合     dim d as new myGetText(AddressOf GetText)     invoke( d, new Object(){ sb } )   else     ' メインスレッドから呼ばれた場合     sb.Append( TextBox1.Text )   end if End Sub Public sub SetText( byVal ss as string )   if TextBox1.InvokeRequired then     ' バックグランドワーカーから呼ばれた場合     dim d as new mySetText(AddressOf SetText)     invoke( d, new Object(){ ss } )   else     ' メインスレッドから呼ばれた場合     TextBox1.Text = ss   end if End If といった具合です 呼び出し側のワーカースレッドでは Dim sb as New System.Text.StringBuilder() dim n as integer = 0 while n < 1000   GetText( sb )   n = sb.ToString   n += 1   SetText( n.ToString ) WEnd

hiro300
質問者

お礼

お礼申しあげるのを遅れて申し訳ありません。 ある事情で見れない環境になってしまっていました。 Delegateを調べてやったら、できました。 ありがとうございます。