2017-03-01 3 views
-1

Ich möchte eine Schleife in meiner windowform Anwendung in C++/CLI erstellen.Wie Schleife während() in einer Formularanwendung

Ich habe die folgende Schaltfläche:

private: System::Void button17_Click(System::Object^ sender, System::EventArgs^ e) { 
    this->button17->ForeColor = System::Drawing::Color::Lime; 

    while (true) { 
    if (button17->Enabled == true) { 
     HWND hwnd1; 
     hwnd1 = FindWindow(NULL, "1"); 
    } 
    else { 
     break; 
    } 

    } /// End while 
} 

ich eine Schaltfläche mit einer Erklärung while() erstellt. Wenn ich den 'on'-Knopf drücke, sollte der Loop ausgeführt werden, und wenn ich diesen Knopf erneut drücke, sollte der Loop enden und das Programm sollte diese while-Anweisung stoppen.

Wenn ich jedoch meine Taste drücke, tut das Programm, was ich will, aber meine Anwendung ausgesetzt und kann nichts tun. Was mache ich falsch, und wie kann ich eine Schleife machen, wenn ich eine Taste drücke, und die Schleife anhalten, wenn ich die Taste erneut drücke?

+0

Sie sollten wirklich C# für WinForms Entwicklung verwenden; C++/CLI ist für "Interop-Szenarien". –

+0

JA, ich bin mir dessen bewusst, aber ich möchte es in C++ tun nur –

+0

Ihr Code ist ** C++/CLI ** das ist * nicht * das gleiche wie C++. Sie sollten ** sehr gute Gründe haben **, WinForms mit C++/CLI 2017 zu programmieren, da dies kein unterstütztes Szenario mehr ist. –

Antwort

0

C++/CLI ist nicht "nur C++". Es dient zum Schreiben von Code, um C# oder andere .Net-Sprachen mit C++ - Code zu verbinden. Wenn Sie "nur C++" schreiben möchten, erstellen Sie ein C++ - Projekt und verwenden Sie MFC für die GUI. In einer beliebigen Sprache lautet die Antwort wie folgt: Eine while-Schleife in einem button-Handler führt dazu, dass der UI-Thread mit der while-Schleife beschäftigt ist und nicht mit dem Neuzeichnen der Benutzeroberfläche oder dem anschließenden Drücken der Taste. Dazu würde ich beim Laden des Programms einen Hintergrund-Thread starten und ein Synchronisationsobjekt verwenden, um auszulösen, ob der Thread arbeitet oder nicht.

+0

Oder verwenden Sie [C++/WinRT] (https://msdn.microsoft.com/en-us/magazine/mt745094.aspx), wo Microsoft scheint zu gehen. –

+0

danke für den Rat .... –

0

Sie blockieren Ihren aktuellen Thread.

Sie müssen diese Schleife nehmen und in einen Thread einfügen. Starten Sie dann den Thread, der im Hintergrund ausgeführt werden soll.

while (true) { 
if (button17->Enabled == true) { 
    HWND hwnd1; 
    hwnd1 = FindWindow(NULL, "1"); 
} 
else { 
    break; 
} 
} /// End while 
Verwandte Themen