繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM