2012-03-18 130 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)