2013-07-26 32 views
-1

我写了这个代码:不能引用从字段初始非静态对象

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

+9

什么该错误与标题之间的关联? –

回答

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; 
+0

我的回答有什么问题,5分钟前发布?你说的是完全一样的东西。 – caesay

+0

不太一样。最大值是在构造函数中初始化它,这比'Shown'事件早发生。可能没有关系,但这取决于Mohsen在访问该类的哪些地方。 –

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这是一个非静态字段,你不能这样做。

+0

't1'仍然在班级级别定义,因此您可以在课程中的任何其他地方访问它。 –

相关问题