Как заставить работать вывод в Label/TextBox в многопоточном режиме?
Происходит считывание и обработка директории с файлами, чью динамику показывает Progressbar. Хочу чтобы параллельно с заполнением этой полоски прогресс бара выводилась процентовка относительно количества обработанных файлов. Однако, процент выводится только в самом конце (100%) никаких промежуточных процентов не выводится.
delegate void Print(string str);
private void Form1_Load(object sender, EventArgs e) {
Print p1 = (string str) => { label1.Text += str; };
var fb =new FolderBrowserDialog();
fb.ShowDialog();
var dir=new DirectoryInfo(fb.SelectedPath);
var files = dir.GetFileSystemInfos();
progressBar1.Maximum = files.Length;
foreach(var f in files) {
hand(f.FullName);
progressBar1.Value++;
//1)
label1.Text = Convert.ToDouble(progressBar1.Value/ progressBar1.Maximum)*100+"%";
//2)
//Task.Run(() => { DoSomething(); });
//3)
//label1.Invoke(p1, new object[] { (progressBar1.Value / progressBar1.Maximum) * 100 + "%" });
}
}
public void DoSomething() {
if (label1.InvokeRequired) {
label1.Invoke(new Action(DoSomething));
}
else {
label1.Text = Convert.ToDouble(progressBar1.Value / progressBar1.Maximum) * 100 + "%";
}
}