Добавление элементов в ListView из другого потока?(Перекрестная операция недопустима) - PullRequest
0 голосов
/ 15 сентября 2010

Я пытаюсь добавить элементы в представление списка в другом потоке, отличном от того, в котором он был создан, и получаю ошибку в нескольких потоках.Как сделать этот элемент доступным в других темах?

Ответы [ 2 ]

2 голосов
/ 15 сентября 2010

попытаться использовать управление свойством: InvokeRequired - http://msdn.microsoft.com/en-us/library/ms171728%28VS.80%29.aspx

private delegate void AddItemCallback(object o);

private void AddItem(object o)
{
    if (this.listView.InvokeRequired)
    {
        AddItemCallback d = new AddItemCallback(AddItem);
        this.Invoke(d, new object[] { o });
    }
    else
    {
        // code that adds item to listView (in this case $o)
    }
}
0 голосов
/ 15 сентября 2010

Используйте Task, который выполняет обновление, запланированное для пользовательского интерфейса с использованием TaskScheduler.FromCurrentSynchronizationContext.

http://msdn.microsoft.com/en-us/library/dd997394.aspx

Преимущество этого подхода перед Control.Invoke состоит в том, что он будетработать в WPF, Silverlight, или Windows Forms, тогда как Control.Invoke только для Windows Forms.

PS Если вы еще не используете .NET 4.0, тогда Task и TaskScheduler доступны в библиотеке Rx .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...