2016-04-29 12 views
0

私のアプリケーションの別のスレッドにマーキーの進捗バーを表示します。 は、ここに私のコードです:backgroundWorkerでprogressBarを作成して表示する - VS2013

bkgWorker->RunWorkerAsync(); 

private: System::Windows::Forms::ProgressBar^ progressBar; 

private: System::Void bkgWorker_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) { 
    progressBar = (gcnew System::Windows::Forms::ProgressBar()); 
    progressBar->Location = System::Drawing::Point(548, 349); 
    progressBar->MarqueeAnimationSpeed = 15; 
    progressBar->Name = L"progressBar"; 
    progressBar->Size = System::Drawing::Size(100, 23); 
    progressBar->Style = System::Windows::Forms::ProgressBarStyle::Marquee; 
    progressBar->TabIndex = 23; 
    progressBar->Show(); 
} 

private: System::Void bkgWorker_RunWorkerCompleted(System::Object^ sender, System::ComponentModel::RunWorkerCompletedEventArgs^ e) { 
    progressBar->Hide(); 
} 

障害がないが、私は自分のフォーム上のプログレスバーが表示されません。 私は何が間違っていますか? ありがとうございます。

答えて

0

旧来の良いバックグラウンドワーカーに代わって、より優れた新しいソリューションがあります。 私はあなたがasync await design. を見てお勧めこの記事を読む:

public async void StartProcessingButton_Click(object sender, EventArgs e) 
{ 
    // The Progress<T> constructor captures our UI context, 
    // so the lambda will be run on the UI thread. 
    var progress = new Progress<int>(percent => 
    { 
    textBox1.Text = percent + "%"; 
    }); 

    // DoProcessing is run on the thread pool. 
    await Task.Run(() => DoProcessing(progress)); 
    textBox1.Text = "Done!"; 
} 

public void DoProcessing(IProgress<int> progress) 
{ 
    for (int i = 0; i != 100; ++i) 
    { 
    Thread.Sleep(100); // CPU-bound work 
    if (progress != null) 
     progress.Report(i); 
    } 
} 
Reporting Progress from Async Tasks

のコードは次のようになります。

関連する問題