2017-03-01 2 views
-1

私のwindowformアプリケーションでC++/CLIでループを作成したいと思います。フォームアプリケーションでwhile()をループする方法

私は、次のボタンがあります。

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 
} 

私はwhile()文を使用してボタンを作成しました。 'on'ボタンを押すとループが実行され、このボタンをもう一度押すとループが終了し、プログラムはこのwhile文を停止する必要があります。

私のボタンを押すと、プログラムは私の望むことをしますが、アプリケーションは中断して何もできません。何がうまくやっていないのですか?ボタンを押すとループを作り、ボタンをもう一度押すとループを止める方法はありますか?

+0

実際には、WinForms開発にはC#を使用する必要があります。 C++/CLIは、「相互運用シナリオ」のためのものです。 –

+0

はい、私はそれを認識していますが、私はC++でそれをやりたいだけです –

+0

あなたのコードは** C++/CLI **です。* C++と同じではありません。 2017年にC++/CLIを使用してWinFormsプログラミングを行うには、**サポートされているシナリオではないので、**非常に良い理由があるはずです。 –

答えて

0

C++/CLIは「単なるC++」ではありません。これは、C#または他の.Net言語をC++コードにインターフェースするためのコードを記述するためのものです。 「ちょうどC++」と書く場合は、C++プロジェクトを作成し、GUI用にMFCを使用します。

答えは次のとおりです。ボタンハンドラのwhileループは、UIスレッドをwhileループでビジー状態にし、UIを再描画したり、後続のボタンプッシュに応答したりすることはありません。このために、プログラムのロード時にバックグラウンドスレッドを開始し、同期オブジェクトを使用して、スレッドが作業を行っているかどうかをトリガーします。

+0

また、[C++/WinRT](https://msdn.microsoft.com/en-us/magazine/mt745094.aspx)を使用してください。 –

+0

アドバイスありがとうございます.... –

0

現在のスレッドをブロックしています。

このループを実行してスレッドに入れる必要があります。その後、バックグラウンドで実行するスレッドを起動します。

while (true) { 
if (button17->Enabled == true) { 
    HWND hwnd1; 
    hwnd1 = FindWindow(NULL, "1"); 
} 
else { 
    break; 
} 
} /// End while 
関連する問題