У меня есть два класса MainWindow
и Foo
и иметь небольшую проблему с учетом времени:Добавление обработчика событий перед тем initializier называется
class MainWindow : Window
{
internal void SomeMethod(string name)
{
Foo foo = new foo(name)
foo.MyEventHandler += EventHandlerMethod;
}
internal void EventHandlerMethod(object sender, EventArgs e)
{
//do something after foo is done initializing stuff
}
}
class Foo
{
internal event EventHandler MyEventHandler;
internal Foo(string name)
{
//start another thread that will at some point via event call FooMethod()
}
private void FooMethod()
{
MyEventHandler(this, null);
}
}
Проблема заключается в том, что я не могу гарантировать, как долго Foo
-initialized нить будет принимать и FooMethod();
можно назвать до MyEventHandler
.
Я думал о возможном решении просто не добавлять инициализатор, но иметь отдельный метод и просто вызывать его после добавления события, но в целом есть ли способ добавить события до того, как вызывается инициализатор?
Конечно, просто добавьте метод Foo.StartWork(). Очень просто. Обеспечение того, что поток прекратит поднимать события после закрытия окна, является проблемой, о которой вы действительно должны беспокоиться. –
Спасибо за комментарий, но я уже упомянул об этом в своем последнем предложении. Мой вопрос был о чем-то другом. И да, я уже убедился, что никаких событий не возникает, если окно закрыто. – phil13131
Мне нужна информация от Foo в MainWindow после завершения инициализации. И я использую потоки, потому что инициализация может занять до одной минуты, и я не хочу, чтобы пользовательский интерфейс зависал – phil13131