を使用した場合、メインスレッド応答していない私はデータソースを通じてのDataTableが移入されているDataGridViewのを持っていると私はセルの書式設定のためのBackgroundWorkerの(バックの色との前景色を使用していますセル)をDataGridViewに追加します。C#のWinフォーム - バックグラウンドワーカー
BackgroundWorker bw = new BackgroundWorker();
private void Frm_Find_Load(object sender, EventArgs e)
{
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
CheckForValidValues();
}
public bool CheckForValidValues()
{
dgv.Invoke((MethodInvoker)delegate()
{
for (int i = 0; i < Dt.Rows.Count; i++)
{
if (Dt.Rows[0]["Name"].ToString() == Value)
{
dgv.Rows[i].Cells["Name"].Style.BackColor = Color.FromArgb(255, 192, 192);
}
else
{
dgv.Rows[i].Cells["Name"].Style.BackColor = Color.White;
}
progressBar1.Invoke((MethodInvoker)(() => progressBar1.Value++));
}
});
this.Invoke((MethodInvoker)delegate()
{
BtnShow.Enabled = true;
dgv.Enabled = true;
});
}
private void btnSave_Click(object sender, EventArgs e)
{
if (bw.IsBusy == false)
{
progressBar1.Visible = true;
progressBar1.Value = 0;
BtnShow.Enabled = false;
dgv.Enabled = false;
progressBar1.Maximum = dgv.Rows.Count;
bw.RunWorkerAsync();
}
}
プロセス全体がダウンしている間DataGridViewのはそのため、ユーザーがDataGridViewの中に任意の値を変更傾けるEnabled=false
まま。
ありDataGridViewの中に、通常は15,000行であり、多くの行がフォーマットすること、これは私がそれのためのBackgroundWorkerを使用する理由である、時間がかかり、それが完全に罰金を動作しますが、ユーザが押すようにしようとしたときが有効false datagridview 2回、メインスレッドが応答しなくなり、プログレスバーがフリーズします。
誰も私にそれをどう対処することができますか?
:代わりに、セルの書式設定に、
BackgroundWorker
を使用しての、それは
CellFormatting
イベントを使用する方が良いでしょうか?アップグレードして 'async/await'を使用する –@AluanHaddad私はVisual Studio(2008)のobseleteバージョンを使用していますが、なんらかの理由でそれに固執しなければならないことを知っています。 –