我在主应用程序中有一个“List”,我试图从一个线程中访问它的元素。我得到这个例外: {“调用线程无法访问此对象,因为另一个线程拥有它。”} System.SystemException {System.InvalidOperationException}
答案 0 :(得分:2)
DispatcherOperation d = myListBox.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() =>
{
// access your listbox and return something
}));
然后请求DispatcherOperation返回值
myValue = d.Result; //Result is of type Object
答案 1 :(得分:1)
您可以通过声明委托来使用交叉线程。
private delegate void thread_delegate();
然后创建一个方法并放置所有访问列表的方法。
private void SampleMethod()
{
....
}
然后为您的线程创建一个方法。 在该方法内部调用您的方法
private void ThreadMethod()
{
thread_delegate d = new thread_delegate(SampleMethod);
d.Invoke();
}
在你创建线程的语句中......
Thread t = new Thread(new ThreadStart(ThreadMethod));
t.Start();
答案 2 :(得分:0)
您正在尝试从非UI线程访问UI。
阅读本文:http://www.codeproject.com/Messages/2927256/Re-WPF-Delegates-The-calling-thread-cannot-access-.aspx
并且:http://www.switchonthecode.com/tutorials/working-with-the-wpf-dispatcher
答案 3 :(得分:0)
试试这个。
MylistBox是一个ListBox
namespace TEST
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Thread th = new Thread(AccessList);
th.Start(MylistBox);
}
void AccessList(Object O)
{
ListBox lBox = O as ListBox;
for (int i = 0; i < lBox.Items.Count; i++)
{
MessageBox.Show(lBox.Items[i].ToString());
}
}
}
}