Мне нужно интегрировать интерфейс WPF в приложение .NET 2.0.Взаимодействие между System.Windows.Forms.Application и System.Windows.Application
ObservableCollection должен быть изменен в потоке GUI Dispatcher, так что я придумал решение с участием 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 для делегирования издания коллекции из правильной темы?