我写了这段代码:
public partial class Form1 : Form
{
ThreadStart ts = new ThreadStart(fun1);
public Thread t1 = new Thread(ts);
public void fun1()
{
DA da = new DA();
string q = "select * from G5_table order by State";
DataTable dt = da.Select(q);
foreach (DataRow item in dt.Rows)
{
richtxtboxEN.Text = item["Word_en"].ToString();
mode = 1;
richtxtboxEN.TextChanged += new EventHandler(richtxtboxEN_TextChanged);
}
}
private void Form1_Shown(object sender, EventArgs e)
{
t1.Start();
}
}
但我有一个错误 字段初始值设定项不能引用非静态字段,方法或属性'G5.Form1.fun1()
答案 0 :(得分:2)
将您的Form1_Shown
更改为:
private void Form1_Shown(object sender, EventArgs e)
{
t1 = new Thread(new ThreadStart(fun1));
t1.Start();
}
然后将t1
更改为:
public Thread t1;
并完全删除课程中的ts
。
错误,是您无法在字段初始值设定项中引用非静态内容。这甚至包括其他类级别的字段。
为了澄清,字段初始化程序是这样的:
public Thread t1 = new Thread(ts);
由于Thread t1
不是属性,并且是在类级别(在方法之外)定义的,因此它是一个字段,并且在声明中正在初始化它。它引用了ts
这是一个非静态字段,你不能这样做。
答案 1 :(得分:2)
您无法在字段初始值设定项中访问非静态方法,就像您在此处一样:
ThreadStart ts = new ThreadStart(fun1);
您需要定义一个构造函数,如下所示:
public partial class Form1 : Form
{
public Form1()
{
ts = new ThreadStart(fun1);
t1 = new Thread(ts);
}
ThreadStart ts;
public Thread t1;