У меня есть .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;
}
... но я не могу найти однозначного ответа на вопрос, безопасно это или нет. Есть идеи?