无法从字段初始值设定项引用非静态对象

时间:2013-07-26 01:12:55

标签: c#

我写了这段代码:

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()

2 个答案:

答案 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;