WeakEventパターンで疑問があります。
検索するとWeakEventManagerのCurrentManagerの実装に
static FooEventManager CurrentManager
{
get
{
Type managerType = typeof(FooEventManager);
FooEventManager manager = (FooEventManager)
WeakEventManager.GetCurrentManager(managerType);
if (manager == null)
{
manager = new FooEventManager();
WeakEventManager.SetCurrentManager(managerType, manager);
}
return manager;
}
}
というサンプルが見つかりましたが
複数スレッドからCurrentManagerにアクセスする可能性を考えると
static FooEventManager()
{
WeakEventManager.SetCurrentManager(typeof(FooEventManager), new
FooEventManager());
}
static FooEventManager CurrentManager
{
get { return (FooEventManager)WeakEventManager.GetCurrentManager(typeof
(FooEventManager)); }
}
とした方が適切ではないでしょうか?
あと、RemoveListenerを呼ばなかった場合、Managerに登録された情報は削除されずに
アプリケーションが終了するまで残ってしまうのでしょうか?
必ずRemoveListenerすべきでしょうか?
WeakEventManagerがDispatcherObjectから派生している事を見逃してました。
WeakEventManagerは複数のスレッドからアクセスすべきではないのですね。
最初の疑問については解決しました。
RemoveListenerについての御意見お願いします。