Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在TabControl中切换选项卡和进行数学运算(.NET)时避免图形伪影_.net_Winforms_Graphics_Tabcontrol - Fatal编程技术网

在TabControl中切换选项卡和进行数学运算(.NET)时避免图形伪影

在TabControl中切换选项卡和进行数学运算(.NET)时避免图形伪影,.net,winforms,graphics,tabcontrol,.net,Winforms,Graphics,Tabcontrol,我在VisualStudio项目中有一个带有TabControl的表单,有4个选项卡 加载表单时,我只准备了3个选项卡 如果用户切换到第四个选项卡,我必须在选项卡中显示数据之前进行一些计算 切换时,我体验到一些图形伪影,如下所示: (不要看模糊,看中间的条纹和右边的图形) 在进行计算之前,我尝试暂停布局,但可能是在TabControl.SelectedIndex中更改了图形已经开始。 不,没有变化的事件 我如何解决这个问题可能不使用单独的线程。因为您说工件在计算完成后会自动更正,这很可能是因为

我在VisualStudio项目中有一个带有TabControl的表单,有4个选项卡

加载表单时,我只准备了3个选项卡

如果用户切换到第四个选项卡,我必须在选项卡中显示数据之前进行一些计算

切换时,我体验到一些图形伪影,如下所示:

(不要看模糊,看中间的条纹和右边的图形)

在进行计算之前,我尝试暂停布局,但可能是在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秒。感谢您的回复。我要试试看!