2012-01-10 11 views
0

私はこれを理解することに非常に熱心に取り組んでおり、イベントを理解できません。誰かが私のコードでイベントプロセスを理解するのを助けることができますか?または、コードを実行しても画像が切り替わらない理由を教えてください。私の接続サブイベントが画像を変更しないのはなぜですか?

'Construct InstanceContext to handle messages on callback interface. 
' An instance of ChatApp is created and passed to the InstanceContext. 
instanceContext = New InstanceContext(Me) 

' Create the participant with the given endpoint configuration 
' Each participant opens a duplex channel to the mesh 
' participant is an instance of the chat application that has opened a channel to the mesh 
factory = New DuplexChannelFactory(Of IChatChannel)(instanceContext, "ChatEndpoint") 
participant = factory.CreateChannel() 

' Retrieve the PeerNode associated with the participant and register for online/offline events 
' PeerNode represents a node in the mesh. Mesh is the named collection of connected nodes. 
ostat = participant.GetProperty(Of IOnlineStatus)() 
AddHandler ostat.Online, AddressOf Me.OnOnline 
AddHandler ostat.Offline, AddressOf Me.OnOffline 
instanceShellPropは、そのシェルのインスタンスを返します

Public Sub Join(ByVal member As String) Implements IChat.Join 
    instanceShellProp.imgP2P.Image = Namespace.My.Resources.Offline 
    MsgBox("JOINED OFFLINE") 
End Sub 

Public Sub Leave1(ByVal member As String) Implements IChat.Leave 
    instanceShellProp.imgP2P.Image = Namespace.My.Resources.Disconnected 
    MsgBox("NOT CONNECTED") 
End Sub 

Public Sub OnOnline(ByVal sender As Object, ByVal e As EventArgs) 
    instanceShellProp.imgP2P.Image = Namespace.My.Resources.Online 
    MsgBox("JOINED ONLINE") 
End Sub 

Public Sub OnOffline(ByVal sender As Object, ByVal e As EventArgs) 
    instanceShellProp.imgP2P.Image = Namespace.My.Resources.Offline 
    MsgBox("JOINED OFFLINE") 
End Sub 

画像を変更することになっている

サブ・ルーチン内

クラスの宣言とメンバー

Partial Public Class Name 
    Implements IChat 

Private member As String 
Private instanceContext As InstanceContext 
Private participant As IChatChannel 
Private ostat As IOnlineStatus 
Private factory As DuplexChannelFactory(Of IChatChannel) 

MDIコンテナです。

すべての画像はリソースにあり、綴りが付けられ、参照されています。 MessageBoxはポップアップしますが、結合を除いてイメージは変更されません。

私はコードダンプを試みていません。私が見ていることを確認して、より良いアドバイスをすることができるようにしようとしています。

すべてのご協力ありがとうございます。

EDIT

さて、私は私が近づいていますように感じる...これは奇妙見つけます。メッセージボックスがコメントアウトされていない場合、画像は変更され、コメントアウトされると画像は変更されません。 これを動作させる方法に関するより良い提案はありますか?

Public Sub OnOnline(ByVal sender As Object, ByVal e As EventArgs) 
    With instanceShellProp.imgP2P 
     .Image = Nothing 
     .Visible = True 
    End With 
    'MsgBox("JOINED ONLINE") 
    With instanceShellProp.imgP2P 
     .Image = Namespace.My.Resources.Online 
     .Visible = True 
    End With 
End Sub 

答えて

0

追加されたApplication.DoEvents()を追加して動作させました。理由は分かりませんが、誰かがそれが素晴らしいと説明できるかどうかは分かりません。ありがとう!

0

画像を変更した後にinstanceShellProp.imgP2P.Refresh()に電話してください。

Refreshについては、Microsoftのドキュメントは言う:

は「そのクライアント領域を無効化し、直後にそのコントロール自体とその子コントロールを再描画するコントロールを強制します。」

+0

これは実際に何が行われていたかから実際に変更されたかどうかはわかりません。しかし、あなたが素晴らしいものになるスレッドの特定のイベントを処理する方法の一般的な方向に私を指すことができれば。 (私はイベントでは新しく、スレッディングには触れていません)。別のコンピュータが接続したときにイベントが実行されているとは限りません(ステータスをオンラインにする) –

関連する問題