我有一个程序使用多个background workers
连续load and read text files (size can up to 1MB)
并更新到oracle数据库。
我遇到的问题是,当后台工作人员正在阅读文件时,main thread
将变为not responding
,而不应该是 private void program_Load(object sender, EventArgs e)
{
bw1.RunWorkerAsync();
bw2.RunWorkerAsync(); //same function as bw1 but different directory
}
private void bw1_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
Thread.Sleep(5000);
bw1.ReportProgress(0);
}
}
private void bw1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
directoryInfo = /* directory url */;
files = directoryInfo .GetFiles();
foreach (FileInfo file in files)
{
/*
read file line by line
load data into database
update file loading status to UI
*/
}
}
。这是读取文件时的默认行为,有什么办法可以解决吗?
谢谢,非常感谢任何帮助。
更新:[我的程序代码简介]
{{1}}
答案 0 :(得分:2)
所有实际的“工作”都在bw1_ProgressChanged
事件处理程序中执行。此代码在UI /主线程上执行。
BackgroundWorker.ProgressChanged
的目的是允许UI更新进度条或其他小部件。实际工作(在这种情况下,加载文件)应该在bw1_DoWork
方法中执行。