murat1895 Geschrieben 24. April 2010 Geschrieben 24. April 2010 Hallo, Ich habe die Aufgabe in der Schule bekommen ein Programm meiner Wahl zu programmieren, jedoch habe ich das Problem, das ich 2 Sachen auf einer Windows Form gleichzeitig machen möchte. Eine Frage soll erscheinen und im Hintergrund soll eine Picture Box hin und her wandern. Und das Gleichzeitig. Dann habe ich mich an die Klasse Threading gewagt aber komme nicht weiter. Hier ein kleiner Auszug public void btnStart_Click(object sender, EventArgs e) { ThreadStart neben; neben = new ThreadStart(MyProcedure); Thread myFirstThread = new Thread(neben); // den zweiten Thread starten myFirstThread.Start(); } public static void MyProcedure() { int x1 = pctPosition.Location.X, y1 = pctPosition.Location.Y; Point p; //Punkt p wird deklariert p = pctPosition.Location; while (x1 < 915) { x1 = pctPosition.Location.X; y1 = pctPosition.Location.Y; p.X += 5; p.Y += 0; pctPosition.Location = p; System.Threading.Thread.Sleep(200); } while (y1 > 550) { x1 = pctPosition.Location.X; y1 = pctPosition.Location.Y; p = pctPosition.Location; p.X += 0; p.Y -= 5; pctPosition.Location = p; System.Threading.Thread.Sleep(200); } } } } Nun erscheint aber der Fehler: Error 1 An object reference is required for the non-static field, method, or property 'Taxi.Route1.pctPosition' C:\Users\Murat\Documents\Visual Studio 2008\Projects\Taxi\Taxi\Route1.cs 45 22 Taxi Wäre nett wenn mir einer Weiterhelfen könnte! Mfg Zitieren
lbm1305 Geschrieben 24. April 2010 Geschrieben 24. April 2010 Moin, wäre nett, wenn Du noch die Deklaration und die Instanzierung der Klasse Route1 zeigen würdest. Achja: Du könntest die -Tags nutzen ;-) Zitieren
JasonDelife Geschrieben 24. April 2010 Geschrieben 24. April 2010 Du solltest MyProcedure() nicht als static deklarieren. Aber sei gewarnt: Die Single-Thread-Rule verbietet den Zugriff auf Steuerelemente aus Threads die nicht der GUI-Thread sind! Und du verstößt dagegen. Das wird nicht gut gehen. Alternativer Ansatz: Nimm einen BackgroundWorker, der die Berechnungen macht und nutze das ProgressChanged-Event, um die PictureBox zu bewegen, denn ProgressChanged wird autom. im GUI-Thread ausgeführt. Infos zum BgW hier: Übersicht über die BackgroundWorker-Komponente Grüße, JasonDelife. Zitieren
lbm1305 Geschrieben 25. April 2010 Geschrieben 25. April 2010 Vielleicht hilft Dir auch dieser Webcast, in dem der Präsenter Tom Wendel am Beispiel einer kleinen WinForms Anwendung den Backgroundworker sowie das Threading erklärt und demonstriert. Webcast: Was Sie über UI-Design wissen sollten - Ein Blick hinter die Kulissen | MSDN Online Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.