我正在尝试通过 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 上的 Friend 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")
在我的第二个例子中:
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()
一切正常;当第二个实例启动时,路径属性在两个实例中都从“blah”变为“blarg”。但是,当我在 MainWindow 中添加此事件处理程序时:
Public Sub ParamHandler() Handles theRemoteObject.ParamEvent
'do stuff here
End Sub
它在第二种情况下停在这条线上:
theRemoteObject = DirectCast(RemotingServices.Connect(GetType(RemoteObject), uri), RemoteObject)
除了以下情况:
mscorlib.dll 中出现“System.Runtime.Serialization.SerializationException”类型的异常,但未在用户代码中处理
附加信息:在程序集“Cutlist3, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中键入“Cutlist3.MainWindow”未标记为可序列化。
我不知道这意味着什么或从哪里开始调试它。您可以提供的任何信息都将非常有帮助和赞赏!