3

スレッドに問題があります。別のスレッドで GridView を View として ListView に設定したい場合、次のようなメッセージが表示されます。

DependencyObject と同じ Thread に 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 に答える