Huhu,
bin aktuell am rumexperimentieren, da ich es am lernen bin. Dieses Test Form hat nur 2 Dinge die es machen soll.
- Das Form Load wird mit einem Label gestartet um den Spieler zu begrüßen. Nach 2 bzw 3 Sekunden soll dass label unsichtbar werden mithilfe eines Backgroundworkes und delegaten. Alles startet normal. Nach den besagten paar Sekunden wirft er mir eine exeption. Als Grund nennt er mir immer das label1. Meine Vermutung ist, dass label 1 ja bereits Form1 Thread läuft und daher nicht mehr geändert werden kann über einen Backgroundworker.
Die Exeption lautet : Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement label1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."
- Der zweite Punkt wäre, dass bei einem Button click ein Fenster aufgehen soll und sich nach ein paar Sekunden wieder schließen soll. Das tut es auch. Drücke ich aber nochmal den Button, wirft er mir diese Exeption: System.ObjectDisposedException: "Auf das verworfene Objekt kann nicht zugegriffen werden.Objektname: "Skynet"."
Hier ist der Code:
Für den Kenner ist das bestimmt alles Kraut und Ruben. Kurz: Ein Chaos. Aber aktuell ist es eher Try and Error :)
public partial class Form1 : Form
{
public delegate void invokeDelegate();
//Backgroundworker wird initialisiert
public BackgroundWorker arbeiter = new BackgroundWorker();
public BackgroundWorker arbeiter2 = new BackgroundWorker();
//Delegaten
public delegate void deleWorker (BackgroundWorker a);
public delegate void gruss(BackgroundWorker b);
//Begrüßungsfenster
Skynet hello = new Skynet();
//Zeigt Skynet Fenster an
public void Show()
{
hello.Show();
Thread.Sleep(3000);
this.hello.Close();
hello.Dispose();
}
//Willkommensgruß wird für 2 Sekunden angezeigt
private void Willkommensgruss(Label a)
{
a.Text = "Willkommen, Fremder.";
Thread.Sleep(2000);
}
public Form1()
{
InitalizeComponent();
arbeiter.DoWork += backgroundWorker1_DoWork;
arbeiter2.DoWork += backgroundWorker2_DoWork;
Skynet hello = new Skynet();
}
private void Form1_Load(object sender, EventArgs e)
{
//delegate
gruss hallo = new gruss(backgroundWorker2.RunWorkerAsync);
hallo.Invoke(backgroundWorker2);
}
//Öffnet Skynet Fenster
private void button2_Click(object sender, EventArgs e)
{
deleWorker test = new deleWorker(backgroundWorker1.RunWorkerAsync);
test.Invoke(backgroundWorker1);
}
//Backgroundworker 1
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Show();
}
//Backgroundworker 2
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
Willkommensgruss(label1);
}
}
}
Danke für deine Hilfe nun aber anderes Problem :D
System.InvalidOperationException: "Visibility kann nicht festgelegt oder Show, ShowDialog oder WindowInteropHelper.EnsureHandle können nicht aufgerufen werden, nachdem ein Window geschlossen wurde."