Theard Beenden
-
Hi,
Das ist mein code:
_status_bar_a = false; Thread^ _status_bar_t = gcnew Thread( gcnew ThreadStart( this,&Form1::_status_bar_theard) ); _status_bar_t->Start();
private: void _status_bar_theard() { int abort = 0; do { if(_status_bar > 99){_status_bar_a = true;} if(_status_bar_a == true){abort = 1;} InvokeSetProgressValue(_status_bar); InvokeSetStatusValue(0); //Thread::Sleep(8); } while(abort != 1); }
Soweit funktioniert ja alles... wenn die Statusbar auf 100% ist dann wird auch der theard beendet... genauso wenn ich einen button mache mit _status_bar_a = true;...
Jetzt besteht nur das proplem, wenn das Program vor 100% beendet wird... wenn ich diesen code verwende, dann geht alles...:
private: System::Void Form1_FormClosed(System::Object^ sender, System::Windows::Forms::FormClosedEventArgs^ e) { _status_bar_a = true; MessageBox::Show( "Theard Beenden", "Beenden",MessageBoxButtons::OK, MessageBoxIcon::Exclamation ); }
Entferne ich nun aber die MessageBox dann geht es nichtmehr...
kann mir vieleicht einer helfen wie ich das zum laufen bringe ohne msgbox?
InFaIN
-
Bitte was? Ich habe Mühe, dich zu verstehen
Vlt anstelle von der message box:_status_bar_t->Join();
MfG
btw es heisst thread.
-
Der schreibfehelr unterläuft mir immerwieder^^
Aber erstmal Danke für deine Hilfe....
Ich denke du hast mein proplem richtig verstanden.... ABER:Wenn ich _status_bar_t->Join(); machen will dann muss ja _status_bar_t global sein... Also initzialisiere ich die variable Global... doch wenn ich das mache dann kommt dieser Fehler:
error C3145: "_status_bar_t": Eine globale oder statische Variable darf nicht den verwalteten Typ "System::Threading::Thread ^" aufweisen.
Was kann ich jetzt machen? Muss ich einen Pointer erstellen?
Naja ich hoffe ihr versteht diesmal besser was ich meine.... Also nochmals zusammengefasst: Ich will das Der Thread auch ohne msgbox beim schließen beendet wird...
InFaIN
-
InFaIN schrieb:
Wenn ich _status_bar_t->Join(); machen will dann muss ja _status_bar_t global sein... Also initzialisiere ich die variable Global... doch wenn ich das mache dann kommt dieser Fehler:
error C3145: "_status_bar_t": Eine globale oder statische Variable darf nicht den verwalteten Typ "System::Threading::Thread ^" aufweisen.
Was kann ich jetzt machen? Muss ich einen Pointer erstellen?
Du kannst entweder einen globalen Pointer auf das Handle per
new
allokieren, oder du machst es anders und wie in .NET/Java üblich alspublic
&static
Feld in einer Klasse.ref class Foo { public: static Bar ^Baz; // Dein Thread. };
MfG
-
Mach _status_bar_t doch einfach zu einem Member von Form1
Das Prefix "_" verwendet man sowieso normalerweise nicht für lokale Variablen wie in deinem Beispielcode, sondern für Member...
^2
-
Ok... Erstmal vielen Dank... ich bin jetzt schonmal ein wenig weiter...
NUR wenn ich jetzt das Programm beende dann "hängt" die Form, aber ich kann das Programm ohne propleme in der Taskleiste schließen... Also es lässt sich jetzt garnichtmehr durch einfaches drücken auf das x beenden...
[EDIT]: Ich muss mich verbessern... es beendet durch rechtsklick auf den Taskleisten eintrag....
Hoffe es hat noch jemand eine idee....
InFaIN