In deinem Code war wohl einfach das Problem, dass er beim Invoke die Methode dem gleichnamigen Event vorgezogen hat.
Zitat:
Wie würde dein eine Lösing mit meinem Code aussehen?
Hier ist ein kleiner Bleistift.
Lege einfach eine neue WindowsApp an und darin eine neue Component.
Schmeiße das hier in die Component und ziehe sie danach auf dein MainForm:
Code:
Control synchronizeTarget;
public Control SynchronizeTarget
{
get { return synchronizeTarget; }
set { synchronizeTarget = value; }
}
public event EventHandler Event;
protected virtual void OnEvent()
{
if (Event != null)
if (synchronizeTarget != null)
synchronizeTarget.Invoke(Event, this, EventArgs.Empty);
else
Event(this, EventArgs.Empty);
}
public void Run(int iterations)
{
ThreadStart call = delegate
{
for (int i = 0; i < iterations; i++)
{
Thread.Sleep(1000);
OnEvent();
}
};
Thread thread = new Thread(call);
thread.Start();
}
Als SynchronizeTarget kannst du das Form selbst wählen. Noch eine Listbox und einen Button druff und das hier als Events verdrahten:
Code:
private void asyncSample1_Event(object sender, EventArgs e)
{
listBox1.Items.Add("...");
}
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
asyncSample1.Run(10);
}