Hier gilt es folgende Frage die ich per Mail (am 21.06.21) bekommen habe zu beantworten.
Wenn ich ein Progressbar mittels BackgroundWorker asynchron bedienen muss, bekomme ich Schwierigkeiten.
Alle Tutorials im Netz bedienen den Progressbar aus der .xaml.cs Datei heraus, nicht aus der .cs Datei (Programmlogik) heraus, wo ich den Progressbar bräuchte.
Nun ist mit nicht klar, wie ich aus der .cs Datei den Progressbar.Value in der .xaml.cs Datei bediene.
Wo ist in der .xaml.cs Datei der Einstiegspunkt und wie rufe ich diesen aus der .cs Datei auf?
Dazu gab es folgenden Code:
XAML
<Window x:Class="WpfTutorialSamples.Misc_controls.ProgressBarTaskOnUiThread"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ProgressBarTaskOnUiThread" Height="100" Width="300"
ContentRendered="Window_ContentRendered">
<Grid Margin="20">
<ProgressBar Minimum="0" Maximum="100" Name="pbStatus" />
</Grid>
</Window>
Code-Behind (xaml.cs)
using System;
using System.ComponentModel;
using System.Threading;
using System.Windows;
namespace WpfTutorialSamples.Misc_controls
{
public partial class ProgressBarTaskOnWorkerThread : Window { public ProgressBarTaskOnWorkerThread() {
InitializeComponent();
}
private void Window_ContentRendered(object sender, EventArgs e)
{
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += worker_DoWork;
worker.ProgressChanged += worker_ProgressChanged;
worker.RunWorkerAsync();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
for(int i = 0; i < 100; i++) // this was not my intent.
// Where ist the entry point for the .cs file control?
{
(sender as BackgroundWorker).ReportProgress(i);
Thread.Sleep(100);
}
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
pbStatus.Value = e.ProgressPercentage;
}
}
}
Programmlogik (beliebige .cs Datei)
// this is only draft code
. . .
pbStatus.Minimum = 0;
pbStatus.Maximum = zimax;
window.ShowDialog();
for(int zi = 0; zi < zimax; zi++)
{
//long code
pbStatus.Value++;?? // this should control ProgressBar
Thread.Sleep(100);
}
Hier gilt es folgende Frage die ich per Mail (am 21.06.21) bekommen habe zu beantworten.
Dazu gab es folgenden Code:
XAML
Code-Behind (xaml.cs)
Programmlogik (beliebige .cs Datei)