2012-09-20 17 views
0

我在Visual Studio項目中有一個帶有TabControl的窗體,並帶有4個選項卡。在TabControl中切換選項卡並執行數學操作時避免圖形僞影(.NET)

當我加載表單時,我只準備3個選項卡。

如果用戶切換到第4個選項卡,我必須先執行一些數學操作,然後才能在選項卡中顯示數據。

當切換我遇到一些圖形假象,如下顯示:

enter image description here

(不看模糊不清,看一下中間的,而條紋和右邊的圖形板缺)

我在做算術之前嘗試了Suspending Layout,但可能在TabControl.SelectedIndexChanged中繪圖已經開始。 不,不存在changing事件。

我該如何解決這個問題? 可能沒有使用單獨的線程。

+0

WinForm的我承擔? – Paparazzi

+0

是.net winform – Teejay

+0

然後標記爲winform。這是UI問題。 – Paparazzi

回答

2

既然您說在計算完成後工件自行更正,這很可能是由於您沒有給UI線程更新屏幕的機會,因爲您正在花費CPU進行計算。您可能需要使用某種線程來解決問題。

Windows窗體包含一個不錯的BackgroundWorker控件,它可以使這種任務非常簡單。只需將控件從「工具箱」拖到窗體設計器上,然後爲DoWorkRunWorkerCompleted事件創建事件處理程序。將計算放入DoWork處理程序中,並在RunWorkerCompleted處理程序中計算完成後需要發生的任何UI更新(重要的是請注意,您不應從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(); 
    } 
    } 
+0

謝謝你的回覆。我會試一試! – Teejay

相關問題