无法在BackgroundWorker中打开OleDbConnection

时间:2012-11-06 09:13:36

标签: c# backgroundworker oledbconnection

尝试使用backgroundworker从mdb读取数据时出现错误

  

程序'[3768] BackgroundWorkerExample.vshost.exe:Managed'已退出,代码为0(0x0)。

没有任何其他信息或例外,我无法抓住它。这是我的代码,没有BGW它工作正常。我想念一下吗?

namespace BackgroundWorkerExample
{
public class TestClass
{
    BackgroundWorker _Worker;

    public TestClass()
    {
        InitializeWorker();
    }

    public void InitializeWorker()
    {
        _Worker = new BackgroundWorker();

        _Worker.DoWork += new DoWorkEventHandler(WorkerDoWork);
        _Worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerRunWorkerCompleted);
    }

    private void WorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        Console.WriteLine("Work completed!");
    }

    private void WorkerDoWork(object sender, DoWorkEventArgs e)
    {
        DataTable data = GetDataTable();
        PrintResults(data);
    }

    public void Run()
    {
        _Worker.RunWorkerAsync();
    }

    public DataTable GetDataTable()
    {
        string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\students.mdb;";

        try
        {
            using (OleDbConnection con = new OleDbConnection(connectionString))
            {
                try
                {
                    con.Open(); // crashes here!

                    DataTable res = new DataTable();

                    string query = "SELECT * FROM students";

                    OleDbDataAdapter adapter = new OleDbDataAdapter(query, con);
                    adapter.Fill(res);

                    return res;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    return null;
                }
            }
        }
        catch (Exception e)
        {
            // never reaches this part
            return null;
        }
    }

    public void PrintResults(DataTable data)
    {
        foreach (DataRow row in data.Rows)
        {
            for (int i = 0; i < 5; i++)
            {
                Console.Write(row[i] + "   ");
            }
            Console.WriteLine();
        }
    }
}
}

1 个答案:

答案 0 :(得分:1)

看起来你没有足够的时间让BackGroundWorker执行。快速解决方法是检查BackGroundWorker是否正忙。如果它很忙,你可以让你的Main thread等待一段时间后台工作人员可以完成其工作。

您看到的消息不是错误,只是表明线程已关闭(primary and the background worker thread

public void Run()
{
    _Worker.RunWorkerAsync();

     while (_Worker.IsBusy){

        Thread.Sleep(4000);
    }
}