後,我從文件中讀取數據,並將它們在其他文件中寫入。我想用標籤顯示讀線的用戶數量。它工作。用戶可以停止閱讀。我使用backgroundworke,但應用程序不響應停止按鈕 - 被凍結。我嘗試了Aplication.DoEvents(),但我必須只需要按兩次來響應。應用程序被凍結使用的BackgroundWorker C#
開始閱讀
private void button1_Click(object sender, EventArgs e)
{
string ext = Path.GetExtension(openFileDialog1.FileName);
if (ext == ".arff")
{
getColumn();
backgroundWorker1.RunWorkerAsync();
}
}
讀寫
private void readDataArffBig()
{
int lines = 0;
StreamWriter sw = new StreamWriter(tempFile, true);
using (StreamReader sr = new StreamReader(openFileDialog1.FileName))
{
while ((line = sr.ReadLine()) != null)
{
lines++;
backgroundWorker1.ReportProgress(lines);
if (status == false)
break;
sw.WriteLine(line)}
}
}
終止閱讀將狀態設置爲false..berofe是真的
private void stop_Click(object sender, EventArgs e)
{
status = false;
}
BW使用
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
readDataArffBig();
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
label8.Text = e.ProgressPercentage.ToString();
label8.Refresh();
}
你可以發佈你的點擊事件嗎?這很可能是問題所在。背景工作者可能沒有正確關閉。 – Nomad101 2013-04-28 23:13:06
代碼被編輯 – 2013-04-28 23:20:48
您正在閱讀的文件中有多少行?如果它是一個帶有10k行的文件,你可能會用太多的更新來氾濫UI線程。另外,你的'StreamWriter'應該在'using'語句中。 – 2013-04-28 23:37:40