0

アプリケーションの新しく起動されたインスタンスから、現在実行中のインスタンス (つまり、文字列形式の 1 つの引数) に ipc 経由で情報を送信しようとしています。

Class RemoteObject
    Inherits MarshalByRefObject
    Public Event ParamEvent As RemoteObject.ParamEventHandler
    Public Property path As String = ""
    Delegate Sub ParamEventHandler()
    Public Sub FireEvent()
        RaiseEvent ParamEvent()
    End Sub
End Class

MainWindow での WithEvents のフレンド:

 Friend WithEvents theRemoteObject As RemoteObject

私はこのように私の最初のインスタンスでそれを設定しています。

theRemoteObject = New RemoteObject
theRemoteObject.path = "blah"
theChannel = New IpcChannel("localhost:9090")
ChannelServices.RegisterChannel(theChannel, False)
RemotingServices.Marshal(theRemoteObject, "ParamReceiver")

そして私の2番目の例では:

Dim uri As String = "ipc://localhost:9090/ParamReceiver"
theChannel = New IpcChannel
ChannelServices.RegisterChannel(theChannel, False)
theRemoteObject = DirectCast(RemotingServices.Connect(GetType(RemoteObject), uri), RemoteObject)
theRemoteObject.path = "blarg"
theRemoteObject.FireEvent()

すべてが正常に機能します。2 番目のインスタンスが起動すると、両方のインスタンスでパス プロパティが「blah」から「blarg」に変更されます。ただし、このイベント ハンドラーを MainWindow に追加すると、次のようになります。

Public Sub ParamHandler() Handles theRemoteObject.ParamEvent
    'do stuff here
End Sub

2 番目のインスタンスでは、次の行で停止します。

theRemoteObject = DirectCast(RemotingServices.Connect(GetType(RemoteObject), uri), RemoteObject)

次の例外があります。

タイプ 'System.Runtime.Serialization.SerializationException' の例外が mscorlib.dll で発生しましたが、ユーザー コードで処理されませんでした

追加情報: アセンブリの 'Cutlist3.MainWindow' と入力します

これが何を意味するのか、どこからデバッグを開始すればよいのかわかりません。あなたが提供できる情報は、非常に役に立ち、高く評価されます!

4

1 に答える 1

0

Dim SecondObject as RemoteObject = DirectCast今後の参考のために、元の宣言を使用する代わりに、2番目のインスタンスで新しいオブジェクト宣言を作成することで問題を解決しましたFriend WithEvents theRemoteObject

于 2013-11-01T18:53:09.033 に答える