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
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 ;-)
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.
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden