Mock Application.DoEvents()-Methode in WPF
In einer herkömmlichen Windows Forms-Anwendung ermöglicht die Application.DoEvents()
-Methode der Anwendung, die Kontrolle an das Betriebssystem zurückzugeben, um andere UI-Ereignisse zu verarbeiten. Allerdings gibt es in WPF nativ keine entsprechende Application.DoEvents()
-Methode.
Um dieses Problem zu lösen, können Sie eine benutzerdefinierte DoEvents()
Methode erstellen. Hier ist ein Beispiel:
<code class="language-csharp">public static void DoEvents() { Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(delegate { })); }</code>
Diese Methode verwendet die Methode Dispatcher.Invoke()
, um einen leeren Delegaten im Hintergrund-Scheduler-Thread aufzurufen. Dadurch wird der Scheduler gezwungen, alle ausstehenden Aufgaben zu bearbeiten, wodurch die Kontrolle effektiv an das Betriebssystem zurückgegeben wird.
Betrachten Sie das folgende Codebeispiel:
<code class="language-csharp">public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void myButton_Click(object sender, RoutedEventArgs e) { Console.WriteLine($"缩放比例:{myScaleTransform.ScaleX},位置:{myCanvas.PointToScreen(GetMyButtonLocation())}"); myScaleTransform.ScaleX = myScaleTransform.ScaleY = myScaleTransform.ScaleX + 1; DoEvents(); // 处理任何挂起的 UI 事件以更新按钮的位置 Console.WriteLine($"缩放比例:{myScaleTransform.ScaleX},位置:{myCanvas.PointToScreen(GetMyButtonLocation())}"); } private Point GetMyButtonLocation() { return new Point(Canvas.GetLeft(myButton), Canvas.GetTop(myButton)); } }</code>
Durch den manuellen Aufruf von DoEvents()
nach der Aktualisierung der Skalierungstransformation stellt die Anwendung sicher, dass die Position der Schaltfläche vor dem nächsten Console.WriteLine()
-Aufruf aktualisiert wird.
Das obige ist der detaillierte Inhalt vonWie erreicht man die Application.DoEvents()-Funktionalität in WPF?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!