0

オンラインで解決策が見つからなかったので、助けてください。1つのmsアクセスデータベース(.mdb)からクエリを選択するためにTHREAD関数を実行しようとしました。別の言葉..同じmsaccessdb(.mdb)をターゲットとするスレッド関数...そしてそれは常に失敗します。コードは次のとおりです。

            private void Form1_Load(object sender, EventArgs e)
            {
                Thread th1 = new Thread(new ThreadStart(method1));
                Thread th2 = new Thread(new ThreadStart(method2));
                th1.Start();
                th2.start();
            }

            private void method1()
            {
                using (OleDbConnection odbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbfileName + ";Mode=Read"))
                {
                    //db manipulation1
                }
            }

            private void method2()
            {
                using (OleDbConnection odbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbfileName + ";Mode=Read"))
                {
                    //db manipulation2
                }
            }
4

1 に答える 1

0

の代わりにBackgroundWorkerを使用することをお勧めしますThread。このクラスは、バックグラウンドスレッドで作業を実行するように設計されています。作業の終了後にUIを更新する場合は、RunWorkerCompletedイベントをサブスクライブできます。このイベントのハンドラーは、UI要素を安全に更新できるUIスレッドで実行されます。

private void Form1_Load(object sender, EventArgs e)
{
   BackgroundWorker bg1 = new BackgroundWorker();
   bg1.DoWork += new DoWorkEventHandler(method1);
   bg1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(method1_Completed);
   bg1.RunWorkerAsync();

   BackgroundWorker bg2 = new BackgroundWorker();
   bg2.DoWork += new DoWorkEventHandler(method2);
   bg2.RunWorkerCompleted += new RunWorkerCompletedEventHandler(method2_Completed);
   bg2.RunWorkerAsync();
}

public void method1(object Sender, DoWorkEventArgs e)
{
    using (OleDbConnection odbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbfileName + ";Mode=Read"))
    {
        //db manipulation1
    }
}

void method1_Completed(object sender, RunWorkerCompletedEventArgs e)
{
    // Update UI.
}

public void method2(object Sender, DoWorkEventArgs e)
{
    using (OleDbConnection odbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbfileName + ";Mode=Read"))
    {
        //db manipulation1
    }
}

void method2_Completed(object sender, RunWorkerCompletedEventArgs e)
{
    // Update UI.
}

DoWorkEventArgs Resultsプロパティを使用して、オブジェクトをDoWorkハンドラーからRunWorkerCompletedハンドラーに渡すことができることに注意してください。

于 2013-03-25T15:15:14.563 に答える