全局变量和线程

本文关键字:线程 全局变量 | 更新日期: 2023-09-27 18:28:23

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

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

我有预感:

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

        }
    }
}

全局变量和线程

tab定义的,但从未初始化过-这意味着您已经说过它是什么,但从未将其设置为任何值。然后你尝试访问其中的元素,即使你还没有初始化它

试试这个:

int[] tab = new int[100];

我给它的大小是100,因为在button1_Click函数中有一个循环迭代到这个值。

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

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

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

您可以自由添加到列表中。

tab.Add(wynik);

以及循环浏览列表

tab.Count();

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