0

我正在尝试通过 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”未标记为可序列化。

我不知道这意味着什么或从哪里开始调试它。您可以提供的任何信息都将非常有帮助和赞赏!

4

1 回答 1

0

为了将来参考,我通过在第二个实例中创建一个新的对象声明来解决我的问题Dim SecondObject as RemoteObject = DirectCast......而不是使用原始Friend WithEvents theRemoteObject声明。

于 2013-11-01T18:53:09.033 回答