在TabControl中切换选项卡和进行数学运算(.NET)时避免图形伪影
我在VisualStudio项目中有一个带有TabControl的表单,有4个选项卡 加载表单时,我只准备了3个选项卡 如果用户切换到第四个选项卡,我必须在选项卡中显示数据之前进行一些计算 切换时,我体验到一些图形伪影,如下所示:在TabControl中切换选项卡和进行数学运算(.NET)时避免图形伪影,.net,winforms,graphics,tabcontrol,.net,Winforms,Graphics,Tabcontrol,我在VisualStudio项目中有一个带有TabControl的表单,有4个选项卡 加载表单时,我只准备了3个选项卡 如果用户切换到第四个选项卡,我必须在选项卡中显示数据之前进行一些计算 切换时,我体验到一些图形伪影,如下所示: (不要看模糊,看中间的条纹和右边的图形) 在进行计算之前,我尝试暂停布局,但可能是在TabControl.SelectedIndex中更改了图形已经开始。 不,没有变化的事件 我如何解决这个问题可能不使用单独的线程。因为您说工件在计算完成后会自动更正,这很可能是因为
(不要看模糊,看中间的条纹和右边的图形)
在进行计算之前,我尝试暂停布局,但可能是在TabControl.SelectedIndex中更改了图形已经开始。 不,没有变化的事件我如何解决这个问题可能不使用单独的线程。因为您说工件在计算完成后会自动更正,这很可能是因为您没有给UI线程更新屏幕的机会,因为您正在使用CPU进行计算。您可能需要使用某种线程来解决该问题 Windows窗体包含一个很好的控件,可以使此类任务变得非常简单。只需将控件从工具箱拖到表单设计器上,然后为
DoWork
和RunWorkerCompleted
事件创建事件处理程序。将您的计算放在DoWork
处理程序中,并将计算完成后需要对UI进行的任何更新放在RunWorkerCompleted
处理程序中(请务必注意,您不应从DoWork
处理程序访问任何UI元素)
下面是一个简短的代码示例:
public partial class Form1 : Form
{
private MyCalculationState _state;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
_state = new MyCalculationState();
// Do some calculations
_state.Value = 5;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Update the UI after calculations are complete
textBox1.Text = _state.Value.ToString();
}
}
然后将其标记为winform。这是一个UI问题。在计算完成后,工件是否会自动更正,或者是否存在残余工件?在计算完成后会更正。请注意,计算只需0.4-0.5秒。感谢您的回复。我要试试看!