我有一个.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;
}
...但我无法找到一个明确的答案,这是否是安全与否。有任何想法吗?