CS0120: Der kræves en objektreference for det ikke-statiske felt, metode eller egenskab 'foo'

Overvej:

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //int[] val = { 0, 0};
            int val;
            if (textBox1.Text == "")
            {
                MessageBox.Show("Input any no");
            }
            else
            {
                val = Convert.ToInt32(textBox1.Text);
                Thread ot1 = new Thread(new ParameterizedThreadStart(SumData));
                ot1.Start(val);
            }
        }

        private static void ReadData(object state)
        {
            System.Windows.Forms.Application.Run();
        }

        void setTextboxText(int result)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new IntDelegate(SetTextboxTextSafe), new object[] { result });
            }
            else
            {
                SetTextboxTextSafe(result);
            }
        }

        void SetTextboxTextSafe(int result)
        {
            label1.Text = result.ToString();
        }

        private static void SumData(object state)
        {
            int result;
            //int[] icount = (int[])state;
            int icount = (int)state;

            for (int i = icount; i > 0; i--)
            {
                result += i;
                System.Threading.Thread.Sleep(1000);
            }
            setTextboxText(result);
        }

        delegate void IntDelegate(int result);

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

Hvorfor opstår denne fejl?

Der kræves en objektreference til det ikke-statiske felt, den ikke-statiske metode eller egenskab 'WindowsApplication1.Form1.setTextboxText(int)

Løsning

Det ser ud til, at du kalder en ikke-statisk egenskab fra en statisk metode. Du skal enten gøre egenskaben statisk eller oprette en instans af Form1.

static void SetTextboxTextSafe(int result)
{
    label1.Text = result.ToString();
}

ELLER

private static void SumData(object state)
{
    int result;
    //int[] icount = (int[])state;
    int icount = (int)state;

    for (int i = icount; i > 0; i--)
    {
        result += i;
        System.Threading.Thread.Sleep(1000);
    }
    Form1 frm1 = new Form1();
    frm1.setTextboxText(result);
}

Du kan finde flere oplysninger om denne fejl på MSDN.

Kommentarer (0)

Du starter en tråd, der kører den statiske metode SumData. Men SumData kalder SetTextboxText, som ikke er statisk. Du har derfor brug for en instans af din formular for at kalde SetTextboxText.

Kommentarer (1)

Jeg har set, at du giver en nulværdi til en tekstboks og returnerer den i en ToString(), da det er en statisk metode. Du kan erstatte den med Convert.ToString(), som kan aktivere nulværdi.

Kommentarer (0)