доступ к элементу списка из потока - PullRequest
2 голосов
/ 18 марта 2010

У меня есть «Список» в основном приложении, и я пытаюсь получить доступ к его элементам из потока. Я получаю это исключение: {"Вызывающий поток не может получить доступ к этому объекту, поскольку он принадлежит другому потоку."} System.SystemException {System.InvalidOperationException}

Ответы [ 4 ]

2 голосов
/ 18 марта 2010
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 голос
/ 18 марта 2010

Вы можете использовать перекрестную нить, объявив делегата.

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();
0 голосов
/ 18 марта 2010

Попробуйте это.
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());
            }
        }
    }
}
0 голосов
/ 18 марта 2010

Вы пытаетесь получить доступ к пользовательскому интерфейсу из потока, не являющегося пользовательским интерфейсом.

Читать это: 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

...