我正在开发一个插件应用程序。我有一个 frmDatasheet.cs(后端),它是 DatasheetPlugin.cs(前端)。我正在处理此数据表和模型插件之间的广播事件,因此如果有人返回数据表,进行一些更改,然后返回建模,建模将知道新状态并自行更新。
我遇到的问题是对 Broadcast 的调用在 frmDatasheet 中,它转到 datasheetPlugin 以引发广播请求,我得到空值,因为我离开插件然后又回到它,一切都丢失了那来回。这是我的代码:
//in the frmDatasheet.cs, click GoToModeling, this is last few lines
IDictionary<string, object> packedState = new Dictionary<string, object>();
packedState = PackState(); <----packs up state to send
frmState.Broadcast(packedState); <----- had to instantiate new Plugin to get at .Broadcast
在 frmDataSheet.cs 的顶部
private DatasheetPlugIn frmState = new DatasheetPlugIn();
这可能是问题吗?获取新的 DatasheetPlugin.. 是否可以清除它,但我还能在 .Broadcast 上获得什么?
这是我在 DatasheetPlugin.cs 中的代码
public void Broadcast(IDictionary<string,object> packedState)
{
signaller.RaiseBroadcastRequest(packedState);
}
我没有收到错误,但信号器显示了事件(BroadcastState、ProjectOpened、ProjectSaved),但它们都有空值。然后它转到信号器,检查 BroadcastState 是否有任何订阅者,因为信号器为空而失败。
我如何确保当我从 frmDatasheet 返回插件时,一切都完好无损?如果我在某个点击事件的插件中本地调用 .Broadcast,则信号器不为空。所以,我很确定这是由于来回而不是保留信息。
更新:我可能应该包含与信号器相关的代码。每个插件都有:
private VBTools.Signaller signaller; //declared at top of plugin
//This function imports the signaller from the VBProjectManager
//Happens when app loads for each plugin.
[System.ComponentModel.Composition.Import("Signalling.GetSignaller", AllowDefault = true)]
public Func<VBTools.Signaller> GetSignaller
{
get;
set;
}
public void OnImportsSatisfied()
{
//If we've successfully imported a Signaller, then connect its events to our handlers.
signaller = GetSignaller();
signaller.BroadcastState += new VBTools.Signaller.BroadCastEventHandler<VBTools.BroadCastEventArgs>(BroadcastStateListener);
signaller.ProjectSaved += new VBTools.Signaller.SerializationEventHandler<VBTools.SerializationEventArgs>(ProjectSavedListener);
signaller.ProjectOpened += new VBTools.Signaller.SerializationEventHandler<VBTools.SerializationEventArgs>(ProjectOpenedListener);
this.MessageSent += new MessageHandler<VBTools.MessageArgs>(signaller.HandleMessage);
}
感谢您的任何见解!