「DeviceManager」クラスとウィンドウフォーム「MainForm」の両方のインスタンスがフィールドとして保存されている「App」クラスがあります。MainForm は、システム トレイ アイコンをクリックすると表示されます。DeviceManager には Docked メソッドと Undocked メソッドがあり、Docked は同期操作を開始します。Docked メソッドは、MainForm が表示されていない場合にのみ操作を開始する必要があります。
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();
}
}