我对ListViewItem.When有一个问题,我在一个线程中使用它,它显示一条消息:
“调用线程必须是STA,因为许多UI组件都需要这一点。”
然后我把它改为:
Mythread.SetApartmentState(ApartmentState.STA);尽管当我使用它时,它再次显示一条消息:
“调用线程无法访问此对象,因为其他线程拥有该对象。”
我用调度员做的。它再次显示一条消息:
“调用线程无法访问此对象,因为其他线程拥有该对象。”
我在做什么来解决问题?
Thread th = new Thread(() =>
{
search.SearchContentGroup3(t, addressSearch.CurrentGroup.idGroup);
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
public void SearchContentGroup3(int id)
{
ListViewItem lst = new ListViewItem();
lst.DataContext = p;
Application.Current.Dispatcher.BeginInvoke(
new Action(() => currentListView.Items.Add(lst)),
DispatcherPriority.Background);
}发布于 2012-09-16 23:09:34
如果我正确理解,您希望启动一个工作线程来加载某种类型的实体,然后创建一个列表视图项来表示它。
我的猜测是,问题在于您正在线程中创建列表视图项,并试图使用Dispatcher将其附加到列表视图。相反,尝试如下:
public void SearchContentGroup3(int id)
{
// Do stuff to load item (p?)
// ...
// Signal the UI thread to create and attach the ListViewItem. (UI element)
Application.Current.Dispatcher.BeginInvoke(
new Action(() =>
{
var listItem = new ListViewItem() {DataContext = p};
currentListView.Items.Add(lst);
}),
DispatcherPriority.Background);
}https://stackoverflow.com/questions/12449461
复制相似问题