Neues Thread greift nicht auf Form1 Elemente ..
-
public: static void TheThread()
{
Form1^ pForm1 = gcnew Form1();
pForm1->label1->Text = "Hello";
}
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)
{ {
Thread^ pThread = gcnew Thread( gcnew ThreadStart( &TheThread ) );
pThread->Start();
}Im Label1 steht nicht "Hello", warum ?
-
Weil Du eine neue Instanz von Form1 erstellst und darauf zugreifst.
-
Außerdem darf in einem Nebenthread niemals auf GUI Elemente direkt zugegriffen werden (WinForms bzw. WinAPI ist single-threaded!!!).
Und ganz wichtig: http://www.c-plusplus.net/forum/263084
Daher nimm C# und beachte Controls von Thread aktualisieren lassen
-
Ihr labert doch alle scheiße ..
Ihr mit euren .Net ist so scheiße und so, komischer weise funktioniert bei mir immer alles mit .net nach einer weile ..
Vorallen ich bin C++ programmierer und soll einfach mal so zu C# wechseln, hahahahh bin doch kein C&P ihr noobs.
-
Wie gut du programmieren kannst, sieht man ja an deinem Code (bezogen auf http://www.c-plusplus.net/forum/p2198270#2198270)
Außerdem ist C# die .NET-Sprache und nicht C++/CLI!!! Wenn du weiterhin in (nativem) C++ programmieren willst, dann nimm dafür eine entsprechende GUI: http://www.c-plusplus.net/forum/230583
Wir wollen dir nur helfen, aber wenn du dir nicht helfen lassen willst...
-
du kannst mittels Invoke auf die Form zugreifen
(gehe davon aus das .NET Framework ist hier das Selbe wie in C#)
Außerdem gibt es auch noch eine unschöne Methode.
Du kannst die Eigenschaft CheckForIllegalCrossThreading in der Form auf false setzten. Somit kannst du auch immer zugreifen. Jedoch gilt das als sehr sehr sehr hässlich. Daher liegt die einzige Möglichkeit eindeutig bei Invoke.