【发布时间】:2010-03-18 09:49:00
【问题描述】:
我在主应用程序中有一个“列表”,我试图从一个线程中访问它的元素。我得到了这个例外: {“调用线程无法访问此对象,因为不同的线程拥有它。”} System.SystemException {System.InvalidOperationException}
【问题讨论】:
标签: c# wpf list multithreading
我在主应用程序中有一个“列表”,我试图从一个线程中访问它的元素。我得到了这个例外: {“调用线程无法访问此对象,因为不同的线程拥有它。”} System.SystemException {System.InvalidOperationException}
【问题讨论】:
标签: c# wpf list multithreading
DispatcherOperation d = myListBox.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() =>
{
// access your listbox and return something
}));
然后要求您的 DispatcherOperation 获取返回值
myValue = d.Result; //Result is of type Object
【讨论】:
您可以通过声明委托来使用跨线程。
private delegate void thread_delegate();
然后创建一个方法并放置所有访问您列表的方法。
private void SampleMethod()
{
....
}
然后为您的线程创建一个方法。 在该方法中调用您的方法 whick
private void ThreadMethod()
{
thread_delegate d = new thread_delegate(SampleMethod);
d.Invoke();
}
在您创建线程的声明中...
Thread t = new Thread(new ThreadStart(ThreadMethod));
t.Start();
【讨论】:
【讨论】:
试试这个。
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());
}
}
}
}
【讨论】: