提问人:Rick Schepers 提问时间:8/15/2023 最后编辑:toyota SupraRick Schepers 更新时间:8/15/2023 访问量:27
C#:WPF,如何解决将动态创建的对象中的事件链接到父元素时的线程问题
C#: WPF, How to solve threading issues when linking events in dynamically created object to the parent element
问:
我正在创建一个显示目录内容的显示元素,我希望能够更改当前显示的目录,并且能够对文件进行单击事件,文件和目录以 的形式显示。usercontrols
我使用以下代码将这些自定义用户控件从父控件添加到列表框中
private void UpdateFolder(StorageMethods.UDirectory sourceDir)
{
Application.Current.Dispatcher.Invoke((Action)(() => this.FolderDisplay.Items.Clear()));
Application.Current.Dispatcher.Invoke((Action)(() => this.currentDirectory = sourceDir));
int i = 0;
foreach (StorageMethods.UDirectory subDir in sourceDir.subDirs)
{
Application.Current.Dispatcher.Invoke((Action)(() => this.FolderDisplay.Items.Add(new DirItem(subDir, i))));
i++;
}
foreach (StorageMethods.UFile file in sourceDir.files)
{
Application.Current.Dispatcher.Invoke((Action)(() => this.FolderDisplay.Items.Add(new DirItem(file, i))));
i++;
}
}
但是,这不会使父级订阅 s click 事件。DirItem'
我想做的是:
DirItem dI = new DirItem(subDir, i);
Application.Current.Dispatcher.Invoke((Action)(() => dI.OnItemClick += Di_OnFolderClick));
Application.Current.Dispatcher.Invoke((Action)(() => this.FolderDisplay.Items.Add(dI)));
这将创建 ,并将其中的事件链接到父控件,但是,当我将 new 传递给调度程序时,会给我一个线程异常,就好像我根本没有使用调度程序一样。
“System.InvalidOperationException:调用线程无法访问此对象,因为其他线程拥有它。”DirItem
DirItem
folderDisplay
答: 暂无答案
评论
DirItemViewModel
ObservableCollection
ListBox
ItemsSource
ObservableCollection
ListBox.ItemTemplate
DataTemplate
DirItem
DirItemViewModel