【发布时间】:2014-08-13 14:52:24
【问题描述】:
当使用委托函数作为新线程时,如何更新 GUI?我正在尝试更新一个标签,它会告诉用户应用程序的进度状态,但这样一来,它只会在完成后更新,而不是在执行时更新。
public partial class Form1 : Form
{
private void button1_Click_1(object sender, EventArgs e)
{
new Thread(new ThreadStart(delegate()
{
int currentFile= 0;
int allFiles = Source.FilePaths.Count;
foreach (var path in Source.FilePaths)
{
var file = new File(path, Source.DestDirPath, System.IO.File.ReadAllLines(path));
file.saveSQL();
currentFile++;
int rounded = (int)((currentFile/ allFiles) * 100);
CompletionLabel.Invoke(new MethodInvoker(() => Completion.Text = "Completion: " + rounded + "%"));
}
})).Start();
}
}
我想让它尽可能简单,因为它只是一个简单的转换器,可以将一些文本文件转换为 sql 文件。
【问题讨论】:
-
int rounded = (int)(((double)currentFile/ allFiles) * 100);? -
27/35 = 0,77..., *100 = 77 当你四舍五入时,进度百分比
-
问题是什么?你总是看到
0 %? -
当我激活进程时,我看到 0%,在它完成 100% 之后。我认为它只更新一次。
标签: c# multithreading user-interface