2012-05-02 13 views
1

Iスレッドを使用して電子メールを送信します。 電子メールが予算の形で送信されたことをユーザーに知らせるために、ラベルにテキストを書き込む必要があります。別のクラスのスレッドからラベルフォームを変更する

'オプションは厳格ではありません。

クラスフォームの機能。

Public Sub ChangeLblText(ByVal msg As String) ' LblIconos.modifiers = public (In form) 
    lblIconos.Text = msg 
End Sub 

新しいスレッドの宣言クラス。 (グローバル宣言した。)

Public TasksPresu As New TasksClassPresu() 
フォームの

アンアイコン "Presupuestos" 私はのInvoke metods、デリゲート機能やフォームのアドレスを試してみました

Public Class TasksClassPresu 
    Sub TaskEmail() 
    'trigger label change? 
    Presupuestos.ChangeLblText("Test") 
    end sub 
End Class 

Dim Thread1 As New System.Threading.Thread(AddressOf TasksPresu.TaskEmail) 
    Thread1.Start() 

クラスTriggedスレッドスレッドをトリガ私は何かを残しているかもしれません。

私が使用した例のデリゲート:フォームPresupuestosクラスで


を:

Public Delegate Sub LabelDelegate(ByVal Msg As String) 

グローバルモジュールでクラスフォーム上の変数

Public Llamada As Presupuestos.LabelDelegate 

機能のほとんどを宣言します。

Public Sub ChangeLblText(ByVal msg As String) ' LblIconos.modifiers = public (In form) 
    lblIconos.Text = msg 
End Sub 

クラストリガー

Public Class TasksClassPresu 
    Sub TaskEmail() 
     Llamada.Invoke("prueba") 
    End Sub 
End Class 

これは、この行でエラーをmakeを実行すると:lbliconos.text = MSG エラー:「。スレッドによる不正な操作それはコントロールへのアクセス持っていた "から" lbliconosを作成されたもの以外のスレッド "

答えて

0

私の詳細はわかりませんが、lblIconos.InvokeRequiredChangeLblTextに、Invokeをtrueにするとデリゲートを呼び出す必要があります。

This questionおよびmany others like itより詳細が得られます。

関連する問題