herbivore: Wenn A grün wird, führt A (wirklich A, die Ampel) die Aktion "gehe über die Straße" aus. B hat damit nichts zu tun. Ein EventHandler läuft (ohne weiteres Zutun) immer in dem Thread, in dem der Event gefeuert wird.
Wird das nicht im folgenden Beispiel zum Problem:
Sagen wir ich hab 2 Forms. Auf der einen ist eine TrackBar auf der anderen eine TextBox. Wenn ich den Wert der TrackBar ändere dann feuert Form1 ein Event sodass in Form2 der Text der TextBox auf den jeweiligen Wert gesetzt wird.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
new Form2(this).Show();
}
public class ValueChangedEventArgs : EventArgs
{
private int value;
public ValueChangedEventArgs(int value)
{
this.value = value;
}
public int Value
{
get
{
return value;
}
}
}
public event EventHandler<ValueChangedEventArgs> ValueChanged;
private void trackBar1_Scroll(object sender, EventArgs e)
{
onValueChanged(trackBar1.Value);
}
private void onValueChanged(int value)
{
EventHandler<ValueChangedEventArgs> valueChanged = ValueChanged;
if (valueChanged != null)
{
valueChanged(this, new ValueChangedEventArgs(value));
}
}
}
public partial class Form2 : Form
{
private Form2()
{
InitializeComponent();
}
public Form2(Form1 form)
: this()
{
form.ValueChanged += new EventHandler<Form1.ValueChangedEventArgs>(form_ValueChanged);
}
void form_ValueChanged(object sender, Form1.ValueChangedEventArgs e)
{
textBox1.Text = e.Value.ToString();
}
}
Wenn ich das richtig verstanden habe setzt somit der Thread von Form1 den Text der TextBox von Form2, was ja eigentlich nicht sein sollte.
Bitte um Erklärung.