我的解决方案包括以下项目:
我想从SignalMonitoring下标事件,但我有循环引用的问题。这就是我想要做的事情:
MainForm.cs
private void btnCollectData_Click(object sender, EventArgs e)
{
Device1BoardForm = new gUSBampBoard();
Device1BoardForm.ShowDialog();
}
DeviceAcquisition1和DeviceAcquisition2
private void btnSignalMonitoring_Click(object sender, EventArgs e)
{
//Show new form
var signalMonitoringForm = new SignalMonitor();
signalMonitoringForm.Parent = this;
// Subscribe to event
DeviceAcq1.DataRead += signalMonitoringForm.OnDataRead;//CANNOT DO THAT!
signalMonitoringForm.ShowDialog();
}
SignalMonitoring
public void OnDataRead(object source, RawdataEventArgs e)
{
if (e.rawData.Length > 0)
{
AddData(e.rawData);
}
}
但是我无法订阅,因为DeviceAcqusition1将SignalMonitoring作为参考,我无法在SignalMonitoring中添加DeviceAcquisition1,因为那时我有循环引用。我需要加载表单并订阅委托。我该怎么办?
答案 0 :(得分:1)
由于SignalMonitoring
和MainApp
都是应用,因此都不应从DeviceAcquisition项目中引用它们。尝试解决问题,以便应用程序依赖于DeviceAcquisition项目,但不是相反。
对于您的具体情况,只需将RawdataEventArgs
移至SignalMonitoring
,您就应该好好去。
在DeviceAcqusition项目可以实现的 SignalMonitoring
内添加一个接口。这样,DeviceAcqusition项目可以依赖于SignalMonitoring
,而不是相反。