Díky ingiraxo za odkaz na video s tutoriálem. Upravil jsem podle něj kód, ale není to úplně to, co bych potřeboval.
Kód teď vypadá takto:
public partial class Form1 : Form
{
private int max = 1000000;
private int lastStav = 0;
public Form1()
{
InitializeComponent();
progressBar1.Minimum = 0;
progressBar1.Maximum = max;
progressBar1.Value = 0;
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Rozjed to");
Worker.RunWorkerAsync();
}
private void button2_Click(object sender, EventArgs e)
{
Watcher.RunWorkerAsync();
MessageBox.Show("Zastav inkrementaci");
}
private void button3_Click(object sender, EventArgs e)
{
MessageBox.Show("Opet bez");
if (!Worker.IsBusy)
{
Worker.RunWorkerAsync();
}
}
private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= max; i++ )
{
if (lastStav != 0)
{
i = lastStav;
}
if (Worker.CancellationPending)
{
lastStav = i;
break;
}
Worker.ReportProgress(i);
}
}
private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("Hotovo");
}
private void Watcher_DoWork(object sender, DoWorkEventArgs e)
{
Worker.CancelAsync();
}
}
BackGroundWorker skvěle posouvá progressBarem, ale tlačítka jsou jakoby zablokovaný a nejde žádné zmáčknout při běhu Workeru, takže nemůžu průběh nikdy pozastavit. Tlačítka jsou klikatelný až po doběhnutí cyklu.