在c#中使用backgroundworker时主线程无响应

时间:2013-04-26 02:30:22

标签: c# winforms backgroundworker readfile

我有一个程序使用多个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}}

1 个答案:

答案 0 :(得分:2)

所有实际的“工作”都在bw1_ProgressChanged事件处理程序中执行。此代码在UI /主线程上执行。

BackgroundWorker.ProgressChanged的目的是允许UI更新进度条或其他小部件。实际工作(在这种情况下,加载文件)应该在bw1_DoWork方法中执行。