アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして、ひろです。
VisualBasicの初心者です。
メインスレッドから"BackgroundWorker"で、
別スレッドを作成し、別スレッドから
スタートアップフォームにあるテキストボックスを参照すると、
TextBox1.text="1" (メインスレッドからの参照の場合)
TextBox1.text=""(別スレッドからの参照の場合)
となり、別スレッドからですと"1"が参照ができません。
"1"を参照したい場合、もしくは書き換えたい場合
どのようにすればいいか、
わかる方がいましたら、教えてください。
よろしくお願いします。

環境:VisualBasic.NET 2008

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/12 17:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!