저는 C# (WPF)의 쓰레드에 새로운 것이므로 일부 레이블과 진행 막대 업데이트를 성공적으로 구현 했으므로 이해가 안됩니다. 왜 GUI에 treeView에 항목을 추가하려고합니까?다른 스레드에서 treeview를 업데이트하십시오.
'System.InvalidOperationException' 이 수 WindowsBase.dll
에서 발생 유형의 처리되지 않은 예외추가 정보 : 별도의 스레드에서 호출 다른 클래스에서 나는 예외 얻을 호출 스레드가이 개체에 액세스 할 수 없습니다를 왜냐하면 다른 스레드가 그것을 소유하기 때문입니다.
내 업데이트 트 리뷰 코드는 이것이다 :
private void updateTreeView(TreeView tree, List<TreeViewItem> items, Boolean clear) {
tree.Dispatcher.Invoke(new Action(() => {
if (clear) {
tree.Items.Clear();
}
ItemCollection treeitems = tree.Items;
foreach (TreeViewItem item in items) {
treeitems.Dispatcher.Invoke(new Action(() => {
treeitems.Add(item);
}));
}
tree.ItemsSource = treeitems;
}));
}
그리고 라인에서 예외 사항 :
treeitems.Add (항목);
미리 감사드립니다.
delegate void DUpdateTreeView(TreeView tree, List<TreeViewItem> items, Boolean clear);
private void UpdataTreeView(TreeView tree, List<TreeViewItem> items, Boolean clear)
{
if (tree.InvokeRequired)
{
DUpdateTreeView d = new DUpdateTreeView(UpdataTreeView);
// replace this by the main form object if the function doesn't in the main form class
this.Invoke(d, new object[] { tree, items, clear });
}
else
{
if (clear)
{
tree.Items.Clear();
}
else
{
// Here you can add the items to the treeView
/***
ItemCollection treeitems = tree.Items;
foreach (TreeViewItem item in items)
{
treeitems.Dispatcher.Invoke(new Action(() =>
{
treeitems.Add(item);
}));
}
tree.ItemsSource = treeitems;
***/
}
}
}
처음에 질문을 읽었습니다. updateTreeView 함수에 전달한 이러한 TreeView 항목 (List 항목)은 어디에 생성합니까? 메인 스레드에서도 생성했는지 확인하십시오. 당신의 TreeView 항목이 작업자 스레드에서 만들어지고 주 스레드에서 추가하려고하는 것처럼 보입니다. –
Viv