Multithreading mit VC++ und Windows Forms



  • Hi,

    Ich hoffe ich habe hier das richtige Forum erwischt und ihr könnt mir helfen....

    Ich beschäftige mich in letzter zeit mit Multithreading, doch ich stoße immer wieder auf das gleiche Proplem... Ich habe schon jegliche in google auffindbare methode getestet...
    Es funktionieren eigentlich alle Methoden, ABER nur bei Konsolenanwendungen...
    Also erstmal zu meinem Ziel:

    Ich will erstmal einfach nur einen Theard erstellen der immer den Wert einer Variable ausließt und dann eine Statusbar auf dießen Wert setzt....

    Bei den Methoden die ich bis jetzt getestet habe entstanden immer Propleme beim übergeben der Funktion....

    Ich hoffe ihr versteht mein prolem und könnt mir helfen wie ich das angehen muss.....

    Vielen Dank schoneinmal jetzt...

    InFaIN



  • WAS für ein Problem hast Du? Fehlermeldung?

    Ein Hinweis: In *Windows* (auch WinForms)-Anwendungen darf nur der Thread auf die Oberflächen-Controls zugreifen, welcher auch die Oberfläche erstellt hat!
    Du darfst also *nicht* von einem anderen Thread einfach ein "textBox1->Text = "Hallo"" machen!

    Verwende dazu bitte "form1->BeginInvoke(...)".



  • Also als beispiel habe ich diesen code....

    using namespace System::Threading;
    
    int _Value_bar = 0;
    
    ...
    
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				Thread piThread = new Thread(new ThreadStart(statusbar));            
    				piThread.Start();
    
    			 }
    
    	public: void statusbar()
    			{
    				this->progressBar1->Value = _Value_bar;
    			}
    

    und da kommt dann...

    1>c:\users\michael\documents\visual studio 2008\projects\thearddddddd\thearddddddd\Form1.h(100) : error C3867: "thearddddddd::Form1::statusbar": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&thearddddddd::Form1::statusbar", um einen Zeiger auf den Member zu erstellen.
    1>c:\users\michael\documents\visual studio 2008\projects\thearddddddd\thearddddddd\Form1.h(100) : error C2750: "System::Threading::ThreadStart": "new" kann für den Referenztyp nicht verwendet werden. Verwenden Sie stattdessen ''gcnew''.
    1>c:\users\michael\documents\visual studio 2008\projects\thearddddddd\thearddddddd\Form1.h(100) : error C3350: "System::Threading::ThreadStart": Ein Delegatkonstruktor erwartet 2 Argument(e).
    1>c:\users\michael\documents\visual studio 2008\projects\thearddddddd\thearddddddd\Form1.h(100) : error C2750: "System::Threading::Thread": "new" kann für den Referenztyp nicht verwendet werden. Verwenden Sie stattdessen ''gcnew''.
    1>c:\users\michael\documents\visual studio 2008\projects\thearddddddd\thearddddddd\Form1.h(100) : error C2512: 'System::Threading::Thread::Thread': Kein geeigneter Standardkonstruktor verfügbar
    

    Diesen "Beispielcode" habe ich von http://msdn.microsoft.com/de-de/library/ms951089.aspx

    So etwas ähnliches kommt ach bei _begintheard() usw....

    Kann mir einer vieleicht ein einfaches Beispiel posten?

    InFaIN



  • Der Beispielcode ist C#, nicht C++/CLI, deshalb lässt er sich nicht übersetzen.

    Aber bevor Du versuchst, den Code nach C++/CLI zu übersetzen, was möchtest Du überhaupt programmieren, WinAPI, MFC oder Windows Forms?



  • Wenn ich deine frage richtig verstehe dann wäre die antwort wohl Windows Forms...
    Ich denke mal dass Multithearding mit der WinApi nicht hinhaut, da ich ja im Theard gerne auf die Controls der Form zuggreifen möchte...

    Vielen Dank für eure Hilfe auch jetzt schon....

    InFaIN



  • InFaIN schrieb:

    Ich denke mal dass Multithearding mit der WinApi nicht hinhaut, da ich ja im Theard gerne auf die Controls der Form zuggreifen möchte...

    Wie ich schon geschrieben habe: Das geht weder mit WinApi, _noch_ mit WinForms!

    Verwende "BeginInvoke"



  • Ok.. danke...

    Jetzt stehe ich nur von dem Proplem, dass ich aus der msdn Hilfe für BeginInvoke nicht wirklich schlau werde....

    Kann mir vielicht kurz jemand BeginInvoke anhand eines kleinen Beispieles erklären?

    [EDIT]: Ich habe versucht durch google mehr über BeginInvoke zu erfahren, doch fand ich dort nur Beispiele und informationen für c#...

    Vielen Dank..

    InFaIN



  • So,... habe jetzt die Lösung gefunden... wens interesiert der kann mal diesen theard lesen.....

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-208716-and-highlight-is-begininvoke.html

    Vielen Dank für die Hilfe von euch allen...

    InFaIN


Log in to reply