Мне нужно интегрировать пользовательский интерфейс WPF в приложение .NET 2.0.
ObservableCollection необходимо изменить в потоке диспетчера GUI, поэтому я нашел решение, включающее InvokeLater()
ObservableCollection<Item> items;
public delegate void AddItemDelegate(Item i);
public void AddItem(Item item)
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(
new AddItemsDelegate(i => items.Add(i), item);
}
Однако, поскольку проект изначально был написан на .NET 2.0, основной поток использует System.Windows.Forms.Application
, поэтому System.Windows.Application.Current
имеет значение null.
Я не могу просто заменить текущий System.Windows.Forms.Application
на System.Windows.Application
, поскольку мое приложение в значительной степени опирается на этот API, и эти два класса широко несовместимы.
Есть ли способ получить текущий System.Windows.Application
? Или способ позвонить BeginInvoke()
на мой System.Windows.Forms.Application
? Или я должен написать свою собственную систему DIY, чтобы делегировать издание коллекции из правильной ветки?