我想使用BackgroundWorker来加速我的图形外观

时间:2015-08-18 21:10:52

标签: c# winforms backgroundworker picturebox

我正在为媒体中心PC编写Kiosk类型的程序。我有一些pictureBoxes作为我的按钮,并希望标签或其他pictureBox(充当标签)可见/不可见,并由MouseEnter和MouseLeave事件触发。

当MouseLeave事件发生时(触发Visible = false),将出现一个白色框,代替之前存在的pictureBox或标签,直到背景图像重新填充为止。

我已经阅读了一些关于使用BackgroundWorker“预加载”我的pictureBox或标签的内容。我不确定我做得对。我是编程新手;我在这里和那里涉猎,并且没有接受过c#的正式培训。

我不是在寻找任何人为我编写代码,但我也不反对。一个如何使用它的简单例子就足够了。

我的表单上有一张背景图片(1920x1080)。我认为在标签或pictureBox的可见性设置为false之后,这个图像实际上更难以刷新。

private void pictureBox1_MouseEnter(object sender, EventArgs e)
        {
                     this.pictureBox9.Visible = true;
        }
private void pictureBox1_MouseLeave(object sender, EventArgs e)
        {
            this.pictureBox9.Visible = false;
        }

我正在尝试使用backgroundWorker DoWork事件,但我真的不知道我在做什么。

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
            this.pictureBox9.Visible = true;
            this.pictureBox9.Visible = false;
    }

我的问题是,“我如何使用backgroundworker来有效地减少因更改我的pictureBoxes或lables的可见性而导致的滞后?

2 个答案:

答案 0 :(得分:2)

BackgroundWorker的工作方式如下:

    BackgroundWorker workerOne = new BackgroundWorker();
    BackgroundWorker workerTwo = new BackgroundWorker();
    private void MyForm_Load(object sender, EventArgs e)
    {
        workerOne.DoWork += workerOne_DoWork;
        workerTwo.DoWork += workerTwo_DoWork;
    }
    private void ThingOne_Click(object sender, EventArgs e)
    {
        workerOne.RunWorkerAsync();
    }
    private void ThingOne_Click(object sender, EventArgs e)
    {
        workerTwo.RunWorkerAsync();
    }
    void workerOne_DoWork(object sender, DoWorkEventArgs e)
    {
        //This will run as async and not interupt main thread
    }
    void workerTwo_DoWork(object sender, DoWorkEventArgs e)
    {
        //This will run as async and not interupt main thread
    }

我在示例中包含了两个。基本上,RunWorkerAsync在自己的线程中将其分解。

答案 1 :(得分:1)

我不建议使用BackgroundWorker,因为更改可视元素的可见性这一事实需要主线程而不是工作线程。在任何情况下,我建议处理不透明度,这样您就不必再次加载图像。