为什么DragDrop不工作?

时间:2015-03-29 17:02:26

标签: c# .net winforms

我正在尝试做一些非常简单的事情,但事实证明这是我做过的最复杂的事情。         private void dropper_DragDrop(object sender,DragEventArgs e)         {             /// TODO:获取数据并使用它做一些事情。

        // DEBUG ONLY:
        MessageBox.Show("Dropped.");
        dropper.BackColor = detector.BackColor;

    }

不起作用。不打印到控制台。现在显示消息框。不会改变背景颜色。

1 个答案:

答案 0 :(得分:2)

您的代码段无法重现此问题。然而,这是非常非常危险的事情。在D + D事件处理程序中启动模态消息循环具有导致非常难以诊断事故的诀窍。

从拖动源开始,它仍然挂在其DoDragDrop()方法调用中,并且在显示消息框时将变为紧张症。这是不健康的。由D + D管道提供的消息循环大致相当于在不适当的时间调用臭名昭着的DoEvents()方法。可能导致的重入问题非常难以理解,它并不假设任何输入事件都会达到它。但它现在确实如此。

您需要确保在 D + D完成后显示消息框。像这样:

    private void dropper_DragDrop(object sender, DragEventArgs e) {
        this.BeginInvoke(new Action(() => MessageBox.Show("Yadayada")));
    }

并且从不这样做来调试任何东西,你有一个调试器。设置一个断点。

还要注意“输出”窗口的内容。可能存在"第一次机会异常"通知那里。 D + D事件处理程序吞没异常而不会窥视。使用Debug>进行调试例外>勾选CLR例外的Thrown复选框。