Apsveriet:
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();
}
}
}
Kāpēc rodas šī kļūda?
Nestatiskajam laukam, metodei vai īpašībai ir nepieciešama atsauce uz objektu 'WindowsApplication1.Form1.setTextboxText(int)
Izskatās, ka no statiskas metodes izsaucat īpašību, kas nav statiska. Jums būs vai nu jāpadara īpašība statiska, vai arī jāizveido Form1 instance.
static void SetTextboxTextSafe(int result)
{
label1.Text = result.ToString();
}
VAI
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);
}
Vairāk informācijas par šo kļūdu var atrast MSDN.
No manas skatoties jūs dot null vērtību uz teksta kastē un atgriezt ToString()
, jo tā ir statiska metode. Jūs varat to aizstāt ar Convert.ToString()
, kas var dot nulles vērtību.