从线程访问列表元素

时间:2010-03-18 09:49:01

标签: c# wpf list multithreading

我在主应用程序中有一个“List”,我试图从一个线程中访问它的元素。我得到这个例外: {“调用线程无法访问此对象,因为另一个线程拥有它。”} System.SystemException {System.InvalidOperationException}

4 个答案:

答案 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)

答案 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());
            }
        }
    }
}