类方法尽管后台工作者没有在另一个线程中运行?

时间:2013-01-11 18:52:37

标签: c# multithreading class methods backgroundworker

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

1 个答案:

答案 0 :(得分:1)

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

FirstTimeBackgroundWorker.DoWork += FirstTimeBackgroundWorker_DoWork;

另外请确保您是否在UI线程上回调UI以更新它,而不是从后台线程更新。