Bedenken Sie:
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();
}
}
}
Warum tritt dieser Fehler auf?
Für das nicht statische Feld, die Methode oder die Eigenschaft 'WindowsApplication1.Form1.setTextboxText(int) ist eine Objektreferenz erforderlich.
Es sieht so aus, als würden Sie eine nicht statische Eigenschaft von einer statischen Methode aus aufrufen. Sie müssen entweder die Eigenschaft statisch machen, oder eine Instanz von Form1 erstellen.
static void SetTextboxTextSafe(int result)
{
label1.Text = result.ToString();
}
ODER
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);
}
Weitere Informationen zu diesem Fehler finden Sie auf MSDN.
Sie starten einen Thread, der die statische Methode SumData
ausführt. Allerdings ruft SumData
SetTextboxText
auf, das nicht statisch ist. Sie benötigen also eine Instanz Ihres Formulars, um SetTextboxText
aufzurufen.
Meines Erachtens geben Sie einem Textfeld einen Nullwert und eine Rückgabe in einem "ToString()", da es sich um eine statische Methode handelt. Sie können sie durch "Convert.ToString()" ersetzen, die den Nullwert aktivieren kann.