C#アプリの高速化web
- 28. 3つに分けたソース
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender,
DoWorkEventArgs e)
{
for(int i = 0; i < 10000000; i++);
}
private void backgroundWorker1_RunWorkerCompleted(object sender,
DoWorkEventArgs e)
{
button1.Enabled = true;
}
- 31. 実装処理の追加
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 10; i++)
{
System.Threading.Thread.Sleep(1000);
//キャンセル処理されたかチェック
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}
//進行状況を渡す
backgroundWorker1.ReportProgress(i);
}
}
- 32. 追加処理のソース
//ボタンが押されたら
private void CancelButton_Click(object sender, EventArgs e)
{
toolStripProgressBar1.Visible = false;
CancelButton.Enabled = false;
//キャンセル処理
backgroundWorker1.CancelAsync();
}
//進行状況の表示
private void backgroundWorker1_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
toolStripProgressBar1.Value = e.ProgressPercentage;
}
- 42. マルチコアソース
Parallel.For(0, 10, i =>
{
System.Threading.Thread.Sleep(1000);
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}
backgroundWorker1.ReportProgress(i);
});
- 43. ソース
static int conuter = 0;
private void button1_Click(object sender, EventArgs e)
{
conuter = 0;
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_ProgressChanged(object
sender, ProgressChangedEventArgs e)
{
conuter++;
toolStripProgressBar1.Value = conuter;
}