CS0120: Statik olmayan alan, yöntem veya özellik 'foo&#39 için bir nesne referansı gereklidir;

Bir düşünün:

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

Bu hata neden oluşuyor?

Statik olmayan alan, yöntem veya özellik için bir nesne referansı gereklidir 'WindowsApplication1.Form1.setTextboxText(int)

Çözüm

Statik bir yöntemden statik olmayan bir özelliği çağırıyor gibi görünüyorsunuz. Ya özelliği statik hale getirmeniz ya da Form1'in bir örneğini oluşturmanız gerekir.

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

VEYA

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);
}

Bu hata hakkında daha fazla bilgi MSDN'de bulunabilir.

Yorumlar (0)

Statik SumData yöntemini çalıştıran bir iş parçacığı başlatırsınız. Ancak, SumData metodu statik olmayan SetTextboxText metodunu çağırıyor. Bu nedenle SetTextboxText yöntemini çağırmak için formunuzun bir örneğine ihtiyacınız vardır.

Yorumlar (1)

Baktığım kadarıyla bir textbox'a null değer veriyorsunuz ve statik bir metot olduğu için ToString() içinde dönüyorsunuz. Bunu null değeri etkinleştirebilen Convert.ToString() ile değiştirebilirsiniz.

Yorumlar (0)