我正在为媒体中心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的可见性而导致的滞后?
答案 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,因为更改可视元素的可见性这一事实需要主线程而不是工作线程。在任何情况下,我建议处理不透明度,这样您就不必再次加载图像。