[英]Main thread not responding when using backgroundworker in c#
我有一个程序,使用几个background workers
,不断load and read text files (size can up to 1MB)
并更新到oracle数据库。
我遇到的问题是当后台工作者正在读取文件时, main thread
将变得not responding
它不应该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
*/
}
}
所有实际的“工作”都在bw1_ProgressChanged
事件处理程序中执行。 此代码在UI / Main线程上执行。
BackgroundWorker.ProgressChanged
的目的是允许UI更新进度条或其他窗口小部件。 实际工作(在这种情况下,加载文件)应该在bw1_DoWork
方法中执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.