Ich muss eine WPF-Benutzeroberfläche in eine .NET 2.0-Anwendung integrieren.Interoperabilität zwischen System.Windows.Forms.Application und System.Windows.Application
ObservableCollection in dem GUI-Dispatcher-Thread geändert werden muss, so kam ich mit einer Lösung bis 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);
}
jedoch beteiligt, da das Projekt ursprünglich mit .NET 2.0, verwendet das Hauptthread ein System.Windows.Forms.Application
geschrieben wurde , also System.Windows.Application.Current
ist null.
Ich kann nicht einfach die aktuelle System.Windows.Forms.Application
durch eine System.Windows.Application
ersetzen, da meine Anwendung stark auf diese API angewiesen ist und die beiden Klassen weitgehend inkompatibel sind.
Gibt es eine Möglichkeit, die aktuelle System.Windows.Application
zu bekommen? Oder eine Möglichkeit, BeginInvoke()
auf meinem System.Windows.Forms.Application
anrufen? Oder soll ich mein eigenes DIY-System schreiben, um die Edition der Kollektion aus dem richtigen Thread zu delegieren?