Windows form og delegate
Et hurtigt eksempel:public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Main main = new Main();
main.Notify += new Main.NotifyOfDoStuff(main_Notify);
Main.DelegateDoStuff del = new Main.DelegateDoStuff(main.DoStuff);
del.BeginInvoke("test", null, null);
}
void main_Notify(object sender, MyEventArgs e)
{
textBox1.AppendText("test"); //denne linie smider InvalidOperationException
}
}
public class Main
{
public delegate void NotifyOfDoStuff(object sender, MyEventArgs e);
public event NotifyOfDoStuff Notify;
public delegate void DelegateDoStuff(string value);
public void DoStuff(string value)
{
for (int i = 0; i < 50; i++)
{
//Some stuff to do
int x = 1 + 2;
//Notify surroundings
if (Notify != null)
{
MyEventArgs args = new MyEventArgs(i);
Notify(this, args);
}
}
}
}
Når jeg prøver at skrive til textBox1 opstår der en InvalidOperationException - opstår da en anden tråd prøver at opdatere noget på UI tråden. Hvorfor er måden er gør det på ikke lovligt og hvordan fixer jeg det?