2012-03-18 132 views
-4

我的程序應該這樣做:在其他線程中寫入每個結果到全局數組。一個主線程從全局數組中讀取並放在屏幕上。全局變量和線程

它不能在Windows窗體應用程序。其他問題,如何在文本框中逐步顯示結果。通常情況下,所有的保護都在循環結束時顯示。每個人如何刷新表格。以及如何更改文本框中的視圖。通常我會看到第一個數字 - 1-,我需要自動查看最後一個數字 - 199。

我有eception:

警告1場 'WFA_watki.Form1.tab' 從未分配與 總是有它的默認值空

我的代碼:

namespace WFA_watki 
{ 
    public partial class Form1 : Form 
    { 
     int[] tab; //----- exception ----- 

     void licz() 
     { 
      int wynik = 0; 
      for (int i = 0; i < 100; i++) 
      { 

       wynik =+ i; 
       tab[i] = wynik; 

      } 

      MessageBox.Show("Fnish thread 1. result: " + wynik); 


     } 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Thread watek1 = new Thread(licz); 
      watek1.Start(); 

      Thread.Sleep(1000); 

      for (int i=0; i < 100; i++) 
      { 
       textBox1.Text += tab[i].ToString() + Environment.NewLine; 
      }  


     } 

    } 
} 
+2

這不是一個例外。 – SLaks 2012-03-18 23:33:39

+2

構建警告非常清晰,並且與您在線程中的嘗試無關。 – 2012-03-18 23:33:58

+1

你讀過這條消息嗎? – SLaks 2012-03-18 23:35:04

回答

2

tab定義但從來沒有初始化 - 這意味着你說什麼是,但從來沒有將其設置爲任何東西。即使您尚未初始化,您仍然嘗試訪問其中的元素。

試試這個:

int[] tab = new int[100]; 

我已經給它的大小爲100,因爲你有一個循環,你button1_Click功能迭代達到該值。

+0

我會建議只提供「啓發性」提示,而不能完整回答那些看起來像初學者的問題。我堅信這會爲topicstarter帶來更多好處。 – Vlad 2012-03-19 09:40:49

1

那麼,首先,你似乎沒有得到一個例外,而是一個編譯器警告。儘管如此,警告是正確的:你永遠不會分配你的變量tab。在C#中(與其他語言相反),你必須明確地分配數組。也許構造函數是一個好地方。沒有它,tab只是宣佈爲能夠包含一個int數組,但它仍然不實際上包含該數組。

0

你永遠不會聲明選項卡的數組大小。在這種情況下,最容易做的事情海事組織只使用int類型,使得

List<int> tab = new List<int>();

的服務,您可以自由添加到列表中。

tab.Add(wynik);

除了遍歷列表

tab.Count();

的陣列中的唯一主要的考慮因素,否則會由於.NET版本(或更好)或嚴重的性能考慮。 有關泛型的更多信息(類型列表),請參閱此msdn文章。 Generics (C# Programming Guide)