Σκεφτείτε:
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();
}
}
}
Γιατί συμβαίνει αυτό το σφάλμα;
Απαιτείται αναφορά αντικειμένου για το μη στατικό πεδίο, τη μέθοδο ή την ιδιότητα 'WindowsApplication1.Form1.setTextboxText(int)
Φαίνεται ότι καλείτε μια μη στατική ιδιότητα από μια στατική μέθοδο. Θα πρέπει είτε να κάνετε την ιδιότητα στατική, είτε να δημιουργήσετε μια περίπτωση της Form1.
static 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);
}
Form1 frm1 = new Form1();
frm1.setTextboxText(result);
}
Περισσότερες πληροφορίες σχετικά με αυτό το σφάλμα μπορείτε να βρείτε στο MSDN.
Ξεκινάτε ένα νήμα το οποίο εκτελεί τη στατική μέθοδο SumData
. Ωστόσο, η SumData
καλεί την SetTextboxText
η οποία δεν είναι στατική. Συνεπώς, χρειάζεστε μια περίπτωση της φόρμας σας για να καλέσετε την SetTextboxText
.
Απ' ό,τι βλέπω, δίνετε μια μηδενική τιμή σε ένα πλαίσιο κειμένου και επιστρέφετε σε μια ToString()
καθώς πρόκειται για μια στατική μέθοδο. Μπορείτε να την αντικαταστήσετε με την Convert.ToString()
που μπορεί να ενεργοποιήσει τη μηδενική τιμή.