1

我有一个应用程序,目前是三种形式。其中两个表单具有运行在不同 GUI 线程上的网格控件。我知道运行单独的 gui 线程不是常态,但性能要求迫使我采用这条路径。第三种形式在 ListView 框中有一组项目,可以在其他两种形式上拖放。我遇到的问题是实现此拖放功能。我最初让这个应用程序在单个 gui 线程上运行,然后拖放工作正常。由于将它们分开,我遇到了跨线程操作的问题。这是我的代码示例。

private void grid1_DragDropContent(object sender, DragDropContentEventArgs e)
{
    if (e.Content == null)
    {

    if (e.Data.GetDataPresent(typeof(ListView.SelectedListViewItemCollection)))
    {
        e.Effect = DragDropEffects.Copy;

       ListView.SelectedListViewItemCollection items =                                  e.Data.GetData(typeof(ListView.SelectedListViewItemCollection)) as
                            ListView.SelectedListViewItemCollection;
         // Code Breaks Here
         foreach (ListViewItem item in items)
         {
             ......
         }

    }
  }
}

尝试访问每个 ListViewItems 时出现异常,因为它们是在不同的线程上创建的。我知道跨线程操作通常是通过使用 Invoke 来解决的,但我不确定如何在这里使用它,因为 SelectedListViewItemCollection 不允许我访问底层的 ListView。有没有办法解决这个问题?非常感谢所有帮助。

谢谢。

4

0 回答 0