0

在按下按钮时,我调用后台工作人员来更改某些文本的颜色,并在 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。除此之外,我正在更改状态条上的文本......

4

1 回答 1

1

您需要在 BackgroundWorker 上添加事件FirstTimeBackgroundWorker_DoWork处理程序:DoWork

FirstTimeBackgroundWorker.DoWork += FirstTimeBackgroundWorker_DoWork;

还要确保您是否正在回调 UI 以更新它以在 UI 线程上执行此操作,而不是从后台线程。

于 2013-01-11T19:39:20.283 回答