全局变量和线程
本文关键字:线程 全局变量 | 更新日期: 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#编程指南)