C# 全局变量和线程

C# 全局变量和线程,c#,.net,C#,.net,我的程序,应该做的是:在其他线程中把每个结果写入全局数组。从全局数组读取的主线程,并显示在屏幕上 它不适用于Windows窗体应用程序。另一个问题是,如何逐步在文本框中显示结果。通常,所有重结果都显示在循环的末尾。如何在每个人移动中刷新表单。以及如何在文本框中更改视图。通常我看到第一个数字-1-,我需要看到最后一个数字-199-自动 我有一个想法: 警告1字段“WFA_watki.Form1.tab”从未分配给,并且 将始终具有其默认值null 我的代码: namespace WFA_watki

我的程序,应该做的是:在其他线程中把每个结果写入全局数组。从全局数组读取的主线程,并显示在屏幕上

它不适用于Windows窗体应用程序。另一个问题是,如何逐步在文本框中显示结果。通常,所有重结果都显示在循环的末尾。如何在每个人移动中刷新表单。以及如何在文本框中更改视图。通常我看到第一个数字-1-,我需要看到最后一个数字-199-自动

我有一个想法:

警告1字段“WFA_watki.Form1.tab”从未分配给,并且 将始终具有其默认值null

我的代码:

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;
             }      


        }

    }
}
名称空间WFA\u watki
{
公共部分类Form1:Form
{
int[]选项卡;//----异常-----
void licz()
{
int-wynik=0;
对于(int i=0;i<100;i++)
{
wynik=+i;
表[i]=wynik;
}
MessageBox.Show(“Fnish线程1.result:+wynik”);
}
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
螺纹watek1=新螺纹(licz);
watek1.Start();
睡眠(1000);
对于(int i=0;i<100;i++)
{
textBox1.Text+=tab[i].ToString()+Environment.NewLine;
}      
}
}
}

首先,您似乎得到的不是异常,而是编译器警告。然而,警告是正确的:您从未分配
选项卡
变量。在C#(与其他一些语言相反)中,必须显式分配数组。也许构造器是个好地方。如果没有它,
tab
只是声明能够包含
int
数组,但它实际上仍然不包含数组。

您永远不会声明tab的数组大小。在这种情况下,IMO最简单的方法就是使用int类型的列表

List<int> tab = new List<int>();
以及循环浏览列表

tab.Count();
否则,阵列的唯一主要考虑因素是.Net版本(2或更高版本)或严重的性能考虑。 有关泛型(类型列表)的更多信息,请参阅这篇msdn文章。

选项卡已定义,但从未初始化-这意味着您已说出它是什么,但从未将其设置为任何内容。然后尝试访问其中的元素,即使尚未对其进行初始化

试试这个:

int[] tab = new int[100];

我给它定了一个100的大小,因为在
按钮1\u Click
函数中有一个循环迭代到该值。

这不是一个例外。构建警告非常清楚,与线程尝试无关。我建议只做“启发”对于看起来像初学者的问题,提示和不完整的答案。我坚信,这将为话题发起人带来更多好处。
int[] tab = new int[100];