3

我的线程有问题。当我想将 GridView 设置为 ListView 作为另一个线程中的视图时。它会显示一条消息:

必须在与 DependencyObject 相同的线程上创建 DependencySource。

    // Create grid view
                GridView grid = new GridView();
                // Add column
                // Name
                grid.Columns.Add((GridViewColumn)myresourcedictionary["gridDirFileName"]);
                // Type
                grid.Columns.Add((GridViewColumn)myresourcedictionary["gridDirFileType"]);
                // Data Modified
                grid.Columns.Add((GridViewColumn)myresourcedictionary["gridDirFileDataModified"]);
                // Size
                grid.Columns.Add((GridViewColumn)myresourcedictionary["gridDirFileSize"]);
// Edit view
            Application.Current.Dispatcher.Invoke(new Action(() => ListViewOp.View = grid));

我在做什么?

4

1 回答 1

6

正如错误所说Dependency Property and its corresponding binding have to be created on same thread。它不能设置在不同的线程上。将网格的创建也放在 UI 调度程序上。由于您的 ListView ViewDP 是在 UI 线程上创建的,因此它的源属性,即GridView也应该在 UI 线程上。

Application.Current.Dispatcher.Invoke((Action)(delegate
   {
       GridView grid = new GridView();
       grid.Columns.Add((GridViewColumn)myresourcedictionary["gridDirFileName"]);
       grid.Columns.Add((GridViewColumn)myresourcedictionary["gridDirFileType"]);
       grid.Columns.Add((GridViewColumn)myresourcedictionary["gridDirFileDataModified"]);
       grid.Columns.Add((GridViewColumn)myresourcedictionary["gridDirFileSize"]);
       ListViewOp.View = grid
   }));
于 2012-09-23T17:40:23.353 回答