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

C# 我想使用BackgroundWorker来加速我的图形外观,c#,winforms,backgroundworker,picturebox,C#,Winforms,Backgroundworker,Picturebox,我正在为media center PC编写一个Kiosk类型的程序。我有一些pictureBox作为按钮,希望标签或另一个pictureBox(用作标签)可见/不可见,并由MouseEnter和MouseLeave事件触发 当MouseLeave事件发生(触发Visible=false)时,会出现一个白色框来代替先前在那里停留了一秒钟的pictureBox或标签,直到背景图像重新填充 我已经读了一些关于使用BackgroundWorker“预加载”我的图片盒或标签的内容。我不确定我是否做对了。我

我正在为media center PC编写一个Kiosk类型的程序。我有一些pictureBox作为按钮,希望标签或另一个pictureBox(用作标签)可见/不可见,并由MouseEnter和MouseLeave事件触发

当MouseLeave事件发生(触发Visible=false)时,会出现一个白色框来代替先前在那里停留了一秒钟的pictureBox或标签,直到背景图像重新填充

我已经读了一些关于使用BackgroundWorker“预加载”我的图片盒或标签的内容。我不确定我是否做对了。我对编程非常陌生;我四处涉猎,没有任何正式的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嫁妆事件,但我真的不知道我在做什么

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

我的问题是,,“如何使用backgroundworker有效地减少因更改图片框或标签的可见性而导致的延迟?

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

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

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

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

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在自己的线程中将其中断。

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在自己的线程中将其中断。

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在自己的线程中将其中断。

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在自己的线程中将其中断。

线程可以很好地预加载数据,因此它可以在不干扰用户界面的情况下完成预加载。。例如,你想扫描你的硬盘上的一个文件名,如果你点击一个按钮就运行代码,你的表单将冻结直到它完成,把搜索代码放在一个线程中,用户界面保持响应,但你必须处理在两者之间处理数据。使用线程直接更改UI元素通常不是一个好主意。你读过吗?嗨,亚当,看来你有不止一个账户。如果这是意外情况,并且您希望合并您的帐户,请按照此处列出的步骤操作;线程可以很好地预加载数据,因此它可以在不干扰用户界面的情况下完成预加载。。例如,你想扫描你的硬盘上的一个文件名,如果你点击一个按钮就运行代码,你的表单将冻结直到它完成,把搜索代码放在一个线程中,用户界面保持响应,但你必须处理在两者之间处理数据。使用线程直接更改UI元素通常不是一个好主意。你读过吗?嗨,亚当,看来你有不止一个账户。如果这是意外情况,并且您希望合并您的帐户,请按照此处列出的步骤操作;线程可以很好地预加载数据,因此它可以在不干扰用户界面的情况下完成预加载。。例如,你想扫描你的硬盘上的一个文件名,如果你点击一个按钮就运行代码,你的表单将冻结直到它完成,把搜索代码放在一个线程中,用户界面保持响应,但你必须处理在两者之间处理数据。使用线程直接更改UI元素通常不是一个好主意。你读过吗?嗨,亚当,看来你有不止一个账户。如果这是意外情况,并且您希望合并您的帐户,请按照此处列出的步骤操作;线程可以很好地预加载数据,因此它可以在不干扰用户界面的情况下完成预加载。。例如,你想扫描你的硬盘上的一个文件名,如果你点击一个按钮就运行代码,你的表单将冻结直到它完成,把搜索代码放在一个线程中,用户界面保持响应,但你必须处理在两者之间处理数据。使用线程直接更改UI元素通常不是一个好主意。你读过吗?嗨,亚当,看来你有不止一个账户。如果这是意外情况,并且您希望合并您的帐户,请按照此处列出的步骤操作;