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