0

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();
        }
    }
}
}
4

1 に答える 1

1

を実行するのに十分な時間がないようですBackGroundWorker。簡単な解決策は、BackGroundWorkerがビジーかどうかを確認することです。ビジー状態の場合はMain thread、バックグラウンドワーカーがジョブを完了できるように、しばらく待つようにすることができます。

表示されているメッセージはエラーではなく、スレッドが閉じられたことを示しているだけです(primary and the background worker thread

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

     while (_Worker.IsBusy){

        Thread.Sleep(4000);
    }
}
于 2012-11-06T09:40:50.447 に答える