Собственно хотелось бы обратится к элементам UI главного окна приложения, только вот непонятно каким образом. Понятное дело, что из самого класса окна к контролам легко получить доступ, а вот чтобы из стороннего - непонятно как. (Передавать их по ссылке не годится). Передавать контролы или само окно в класс по ссылке не годится, так как в нём есть методы, которые должны асинхронно выполняться с обработчиками окна. Есть ли какой-то ещё способ? В противном случае придётся использовать ISynchronizeInvoke, а этого хотелось бы избежать.
Ответ
Передавать контролы по ссылкам, конечно, не стоит. Нужно создать event в главном окне и уведомлять его через этот event о необходимости изменения контролов. Это если в одном потоке находятся главное окно и тот, кто посылает ему уведомление.
// Какой то класс
public class MyClass
{
public event MyDelegate MyDelegateEvent; // Ваш евент
public void f()
{
// При вызове функции f() уведомляем главное окно (и всех кто подпишется на него)
MyDelegateEvent();
}
}
public delegate void MyDelegate(); // Делегат
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyClass my = new MyClass(); // Это просто создание нашего класса
// Создаем наше уведомление
my.MyDelegateEvent += new MyDelegate(my_MyDelegateEvent);
}
void my_MyDelegateEvent()
{
// Изменяем нужные контролы
}
}
Комментариев нет:
Отправить комментарий