【问题标题】:"Must create DependencySource on same Thread as the DependencyObject" When Create GridView创建 GridView 时“必须在与 DependencyObject 相同的线程上创建 DependencySource”
【发布时间】:2012-09-24 01:46:13
【问题描述】:

我的线程有问题。当我想将 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));

我在做什么?

【问题讨论】:

    标签: c# wpf multithreading dispatcher


    【解决方案1】:

    正如错误所说Dependency Property and its corresponding binding have to be created on same thread。它不能在不同的线程上设置。将网格的创建也放在 UI 调度程序上。由于您的 ListView View DP 是在 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
       }));
    

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多