我有一個.NET 1.1。應用程序,它通過一個定製的翻譯系統,看起來有點像這樣提供字符串資源:取消訂閱來自長期事件源的表單組件 - 何時?
interface ITranslationProvider
{
string GetTranslation(string key);
event LanguageChangedEvent LanguageChanged;
}
即:語言可以在運行時更改和組件需要通過更新顯示字符串迴應。
單個翻譯提供程序將持續應用程序的生命週期,而使用翻譯服務的Windows Forms組件會動態創建。如果我編寫使用此表單的組件,何時是退訂LanguageChanged
事件的正確時間?
例如,它似乎是壓倒一切的Disposing()
應該工作:
class MyPanel : System.Windows.Forms.Panel
{
public MyPanel(ITranslationProvider translator)
{
this.translator = translator;
translator.LanguageChanged += new LanguageChangedEvent(SetText);
SetText();
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
// is this the correct place to unregister? will Dispose() get
// called on this panel, even though the translator's event has
// a reference to it?
translator.LanguageChanged -= new LanguageChangedEvent(SetText);
}
private void SetText()
{
this.Text = translator.GetTranslation("my.panel.text");
}
private ITranslationProvider translator;
}
...但我無法找到一個明確的答案,這是否是安全與否。有任何想法嗎?