Ich versuche, eine Fortschrittsanzeige in meinem Hauptfenster zu integrieren, nachdem eine Schaltfläche gedrückt und die Schaltfläche ausgeführt wird. Ich weiß, dass ich einfach etwas Einfaches vermisse, aber ich bin immer noch neu in WPF, da ich hauptsächlich Windows Forms verwende.Wie verwende ich Fortschrittsbalken in WPF
Meine XML ist wie folgt aufgebaut:
<Window x:Class="Program1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Program1"
mc:Ignorable="d"
Title="Program1" Height="1029" Width="1300" SnapsToDevicePixels="True" BorderThickness="0" Margin="0" ResizeMode="NoResize" Closing="Window_Closing"
x:Name="FirstWindow">
<Grid x:Name="Grid1">
<Button x:Name="btnPopulate" Content="Populate" HorizontalAlignment="Left" Margin="243,66,0,0" VerticalAlignment="Top" Width="118" Height="29" Click="btnPopulate_Click"/>
<Button x:Name="btnClear" Content="Clear" HorizontalAlignment="Left" Margin="366,66,0,0" VerticalAlignment="Top" Width="118" Height="29" Click="btnClear_Click"/>
<ProgressBar x:Name="progressBar" HorizontalAlignment="Left" Height="30" Margin="10,943,0,0" VerticalAlignment="Top" Width="351"/>
</Grid>
</Window>
ich meine bevöl Button-Klick-Methode haben, wie folgt:
private void btnPopulate_Click(object sender, RoutedEventArgs e)
{
Thread backgroundThread = new Thread(
new ThreadStart(() =>
{
for (int n = 0; n < 100; n++)
{
Thread.Sleep(50);
progressBar.Value = n;
};
}
));
backgroundThread.Start();
}
Die Frage, die ich gegenüber habe ist, dass ich diese Störung erhalte:
The name 'progressBar' does not exist in the current context
und ich bin mir nicht sicher, wie ich auf das ProgressBar-Steuerelement von meiner Schaltfläche Klick-Methode zugreifen kann.
Ich weiß, ich vermisse wahrscheinlich etwas Einfaches, aber ich versuche immer noch, den Rahmen von WPF zu bekommen.
Zuerst lernen, ist die Markup-XAML (das die Genehmigung erteilt, XML ist technisch). Sie sollten auch das MVVM-Muster untersuchen. mit WPF wie WinForms ist ein schneller Weg zu Schmerzen. – BradleyDotNET
Sie können WPF-Steuerelemente nicht aus einem anderen Thread als dem verwenden, auf dem sie erstellt wurden. (Normalerweise der UI-Thread) Also, was Sie tun, wird nicht funktionieren. –
Während @BrandonKramer korrekt ist; Wenn Sie über eine Bindung aktualisiert würden, wären Sie in Ordnung (diese werden automatisch dem UI-Thread zugeordnet). Sie können auch mit dem 'Dispatcher.BeginInvoke' zum UI-Thread marschieren. – BradleyDotNET