アプリケーションの新しく起動されたインスタンスから、現在実行中のインスタンス (つまり、文字列形式の 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' と入力します
これが何を意味するのか、どこからデバッグを開始すればよいのかわかりません。あなたが提供できる情報は、非常に役に立ち、高く評価されます!