我有一个类'App',它有一个'DeviceManager'类和一个存储为字段的Windows窗体'MainForm'的实例。MainForm 通过单击系统托盘图标可见。DeviceManager 有 Docked 和 Undoked 方法,其中 Docked 启动同步操作。只有在 MainForm 不可见时,Docked 方法才应该开始操作。
DeviceManager 无权访问 App 的成员,因此它不能使用 App 对 MainForm 的引用来检查表单的状态。让 App 将自身传递到 DeviceManager 的构造函数中,当 DeviceManager 没有其他需要此类引用时(MainForm 和 DeviceManager 迄今为止彼此不知道),这似乎是很多耦合。
我现在正在考虑让 App.IsUserActive 属性的设置器引发一个事件,DeviceManager 可以使用该事件来维护自己的“IsUserActive”字段。
我还有其他方法可以研究吗?
编辑:添加代码来说明:
internal class App
{
private DeviceManager _deviceMgr;
private MainForm _mainForm;
internal App()
{
_deviceMgr = new DeviceManager();
_mainForm = new MainForm { Visible = false };
}
}
internal class DeviceManager
{
private void Docked()
{
if (!_mainForm.Visible) //can't see MainForm or App from here
{
Connect();
StartSynchronization();
}
}
private void Undocked()
{
Disconnect();
}
}