2

私はwpfアプリケーションを持っています。アプリケーションの実行中に、あるメソッドに到達すると、いくつかの操作を実行するイベントを発生させます。この場合、データベースで動作するDLLのインスタンスにアクセスする必要があり、別のスレッドがそのオブジェクトを所有していることを通知する例外がスローされます。これを処理するための最良の方法は何でしょうか?

//this is in the main thread - in MainWindow.cs - code behind
 MyDataBaseManager DB_manager = new MyDataBaseManager(connectionString);

//event handler
 void MainWindow_MyCustomEvent(object sender, MainWindow.MyCustomEventArgs e)
    {
        try
        {

            if (str1 == str2)
            {
                //getting exception when trying to perform this statement 
                DB_manager.UpdateTable(this.textBlock_MyTextBlock.Text, DateTime.Now, currenrUser);


                theNextstring = DB_manager.GetTheNextString();

                if (theNextstring != string.Empty)
                {
                    this.textBlock_theNextstring.Text = theNextstringף
                }

            }



        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButton.OKCancel, MessageBoxImage.Error);
        }
    }

ifステートメントで2つの文字列を比較すると、例外はスローされませんが、DB_managerを使用する場合、またはUIコンポーネントを使用する場合は、-

The calling thread cannot access this object because a different thread owns it.

イベントに接続文字列を渡して、オブジェクトに新しいインスタンスを作成する必要がありますか?または、別のより良い解決策がありますか?

ありがとう...

4

1 に答える 1

0

これを行う最良の方法は、Dispatcher.Invokeメソッドを使用することです...this.textBlock_theNextstring.Dispatcher.Invoke。

サンプル-http ://social.msdn.microsoft.com/forums/en-US/wpf/thread/360540eb-d756-4434-86f9-a3449f05eb55

于 2012-05-17T06:00:56.800 に答える