Consider:
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(); } } }
Why is this error occurring?
An object reference is required for the nonstatic field, method, or property ‘WindowsApplication1.Form1.setTextboxText(int)
It looks like you are calling a non static member (a property or method, specifically
setTextboxText) from a static method (specificallySumData). You will need to either:setTextboxTextstatic:static void setTextboxText(int result)HOWEVER, in this case, setTextboxText REQUIRES access to instance variables, so cannot be static.
Instead do:
setTextboxTextvia a static singleton of Form1:Create an instance of
Form1within the calling method:BUT that won’t do what you want, if an instance of Form1 already exists.
Passing in an instance of
Form1would be an option also.Make the calling method a non-static instance method (of
Form1):More info about this error can be found on MSDN.