-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() を参照できないというエラーがあります

4

2 に答える 2

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しており、これを行うことはできません。

于 2013-07-26T01:15:29.873 に答える
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;
于 2013-07-26T01:20:58.020 に答える