Обновление DLL пользовательского интерфейса вызова функции - PullRequest
1 голос
/ 03 января 2012

Я пытаюсь выяснить, как я могу обновить свой интерфейс из библиотеки DLL, которая выполняет какую-то задачу.

Я не могу понять, как DLL может знать что-либо об интерфейсе пользователя.

Надеюсь, объяснить более ясно:

У меня есть, скажем, task1, task2 и пользовательский интерфейс.
Task1 и task2 являются как DLL, так и не знают ничего о пользовательском интерфейсе.
Как я могу сказать DLL для вызова какой-либо функции в пользовательском интерфейсе?

Надеюсь, я достаточно ясен, мои знания C # далеки от того, чего я хочу.

Заранее спасибо.

PS Надеюсь, что не хуже, обе задачи имеют свое собственное приложение.

1 Ответ

2 голосов
/ 03 января 2012

Вы не говорите им обновить пользовательский интерфейс, вы вызываете событие, которое указывает, что что-то изменилось, что может быть интересным - вы затем заставляете пользовательский интерфейс подписаться на это событие в ваших экземплярах и соответственно обновляете пользовательский интерфейс.

Итак, допустим, вы хотите вызвать событие всякий раз, когда изменяется какое-либо из свойств класса (удобно, если есть интерфейс INotifyPropertyChanged, который даже описывает, что вы собираетесь это сделать, и многое будет происходить » заметить "и" поступай правильно ", например BindingList<T>)

Итак, вы заявляете, что у вашего класса есть свойства:

public event PropertyChangedEventHandler PropertyChanged;

Затем, чтобы поднять событие, вы просто звоните:

if (PropertyChanged != null)
{
    PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
    PropertyChanged(this, e);
}

Чтобы подписаться на события (в вашем клиентском приложении / на уровне пользовательского интерфейса), это так же просто, как иметь ваш хедлер событий:

protected void yourClass_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
     // Update the UI -- might need to check whether you need too invoke, if you're multi-threaded
}

Добавить проводку

YourClass foo = new YourClass();
foo.PropertyChanged += new PropertyChangedEventHandler(this.yourClass_PropertyChanged);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...