我有一个wpf应用程序。 在应用程序运行期间,当我到达某个方法时,我会触发执行某些操作的事件。在这种情况下,我必须访问与Database一起使用的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语句中的两个字符串时,它不会抛出异常,但是当我想使用DB_manager或使用UI组件时,我得到了 -
The calling thread cannot access this object because a different thread owns it.
我应该将连接字符串传递给事件并在对象中创建新实例吗?还是有另一个更好的解决方案?
感谢...
答案 0 :(得分:0)
最好的方法是使用Dispatcher.Invoke方法...... this.textBlock_theNextstring.Dispatcher.Invoke。
样本 - http://social.msdn.microsoft.com/forums/en-US/wpf/thread/360540eb-d756-4434-86f9-a3449f05eb55