27. januar 2009 - 11:49Der er
2 kommentarer og 1 løsning
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);
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?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
jeg fik det løst ved at gøre følgende i min form class:
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);
}
delegate void SetStringDelegate(string parameter); void main_Notify(string value) { if (textBox1.InvokeRequired) { Invoke(new SetStringDelegate(main_Notify), new object[] { value }); } else { textBox1.AppendText(value + Environment.NewLine); } } }
hvilket er stort set det samme som du også skriver :) Smid svar for point...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.