按下按钮,我调用后台工作程序来更改某些文本的颜色,在DoWork方法中,它会创建一个新对象并执行其中一种方法。这是代码:
private void StartProcessButton_Click(object sender, EventArgs e)
{
FirstTimeBackgroundWorker.RunWorkerAsync(GenKeyLabel.ForeColor = Color.DodgerBlue);
}
DoWork方法......
private void FirstTimeBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
KeyFile k = new KeyFile();
k.CreateDummyFile(DLetter);
}
[CreateDummyFile有效地进行了大量文件处理,例如复制,删除和创建文件(最多4.0MB)。在整个过程中,我调用ReportProgress方法并更改表单上的一些GUI元素,但是因为它在一个块中执行,我看不到持续进度或GUI元素发生变化]
现在它在CreateDummyFile方法中做了它应该做的事情,但是它执行它就好像它不在另一个线程中(就像你按下按钮做某事而表单会冻结,然后只显示最终结果)。任何想法为什么会这样?我做错了什么?
该类中有很多代码被执行,所以我不能把它放在DoWork方法中。
编辑:删除了所有的ReportProgress,它仍然只更改了我的一个GUI元素。 (我所做的就是更改font.forecolour。除此之外,我正在改变状态条上的文字......
答案 0 :(得分:1)
您需要在BackgroundWorker上添加FirstTimeBackgroundWorker_DoWork
作为DoWork
事件的处理程序:
FirstTimeBackgroundWorker.DoWork += FirstTimeBackgroundWorker_DoWork;
另外请确保您是否在UI线程上回调UI以更新它,而不是从后台线程更新。