- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
场景:为 UI 控件启用了拖放的 C#/WPF 应用程序。当从 Windows 资源管理器中拖动文件并将其放到 UI-Control 上时,会出现一个 MessageBox。
问题:只要 MessageBox 没有被点击(通过点击“确定”),Windows 资源管理器就会卡住并(可能)等待拖放事件返回。
问题:有什么方法可以让 Windows Explorer 从显示 MessageBox 的等待状态中释放出来? “DragEventArgs”类的“Handled”属性怎么样?
代码:
private void OnDrop_ButtonOpen(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
MessageBox.Show(files[0]);
}
}
PS:还有其他类似的问题。但是,没有“过早地”返回事件的解决方案。
最佳答案
如果我们看一下this documentation article about Drag and Drop operations我们可以看到它说:
When the user starts a drag-and-drop operation, the source creates a data object and initiates a drag loop by calling DoDragDrop.
因此源窗口现在陷入了由 DoDragDrop
function 启动的循环中.
当光标进入另一个窗口(称为目标窗口)时,DoDragDrop
函数将调用DragEnter
和DragOver
目标窗口的 IDropTarget
接口(interface)的方法。
当您释放鼠标按钮将数据拖放到目标窗口时,DoDragDrop
函数将调用IDropTarget
的Drop
方法界面。如果我们继续阅读...
When the target is finished with the data object, it returns from IDropTarget::Drop. The system returns the source's DoDragDrop call to notify the source that the data transfer is complete.
...我们看到源窗口的 DoDragDrop
调用在目标窗口退出其 IDropTarget::Drop
方法之前不会退出。
在 .NET 中,当 IDropTarget::Drop
方法被调用时,它会引发 DragDrop
事件。引发事件意味着它会调用所有附加的 DragDrop
事件处理程序,并且由于这不是异步的,因此调用方法 (IDropTarget::Drop
) 将被阻止,直到所有 DragDrop
事件处理程序已被调用并退出。
所以回答您的问题:不,您不能“过早”归还它。它被每线程代码执行的标准逻辑阻塞:一次一行。
您最好的选择是:
在您显示消息框的位置启动任务/新线程。您可能必须为此创建一个消息循环,但我不是 100% 确定。
创建您自己的消息框表单并使用非模态调用 Form.Show()
显示它。
关于c# - 文件拖放事件处理程序中的 MessageBox 导致 Windows 资源管理器卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40854984/
我有一个 12 节点集群,我运行的是 yarn 架构。似乎我的节点大部分时间都很忙,而且很多时候作业都失败了。如何随时查看资源的使用情况?还有什么方法可以为用户设置有限的资源,例如:如果用户提交作业,
我有一个关于 Xtend 的非常具体的问题。 在我读到的有关 xText/xTend 的每个示例中,我都会看到类似这样的内容: override void doGenerate(Resource re
代码参考 代码文件参考下述详解的类图,工程参考第零章工程说明 。 概述 在游戏项目中有很多资产如:预制体,图片,音频,Lua脚本,Shader等等。他们随打包放在用户的硬盘里。在游戏的运
我有一个包含10个节点的Hadoop集群。在10个节点中,有3个部署了HBase。有两个共享集群的应用程序。 应用程序1从hadoop HDF写入和读取数据。应用程序2将数据存储到HBase中。有没有
例子: var image = UIImage.FromFile("/path/to/image.png"); var imageView = new UIImageView(); imageView
我需要存储 ThirdPartyElm 类型的元素序列,我使用的是 std::vector(或 std::array 如果我需要一个固定大小的序列)。 我想知道我应该如何初始化序列。第一个版本创建一个
我有一个具有UITabBarController的MonoTouch应用程序,每个选项卡都是一个UINavigationController。其中一些包装了一个UIViewController,后者添
所以我一直在研究使用资源管理 API 对 azure 进行只读 api 访问。现在我主要关注虚拟机。我一直在使用这个预发布包和 TokenCredentials: https://www.nuget.
我想获取 Azure 中包含给定标签的资源列表。基本请求形式如下:https://management.azure.com/subscriptions/{subscriptionId}/resourc
我一直在尝试访问 Azure 公开的 REST API,例如“https://management.azure.com/subscriptions?api-version=2016-06-01”,但无
如何使用 Azure 资源管理 API 获取资源组的资源列表 我已经安装了 Microsoft.Azure.Management.ResourceManager.Fluent Nuget 包下面的脚本
如何使用 Azure 资源管理 API 获取资源组的资源列表 我已经安装了 Microsoft.Azure.Management.ResourceManager.Fluent Nuget 包下面的脚本
我正在尝试在 Jersey 中编写 RESTful Web 应用程序时管理竞争资源(如:数据库 session )。通常我会写这样的代码: Session session = getSession()
我是这个论坛的新手。 我正在查看有关 Azure 资源运行状况 Rest Api 的 Microsoft 文档,链接如下: https://azure.microsoft.com/en-us/blog
我想使用这些 API 获取特定 Azure 帐户或订阅的运行状况和其他资源详细信息 https://learn.microsoft.com/en-us/rest/api/resourcehealth/
我正在尝试在 Azure 资源管理的上下文中找到应用程序权限的安全最佳实践。 目前,management.azure.com 仅列出了一项权限,它是management.azure.com/user_
我想使用这些 API 获取特定 Azure 帐户或订阅的运行状况和其他资源详细信息 https://learn.microsoft.com/en-us/rest/api/resourcehealth/
我正在尝试在 Azure 资源管理的上下文中找到应用程序权限的安全最佳实践。 目前,management.azure.com 仅列出了一项权限,它是management.azure.com/user_
我正在寻找一种以编程方式列出组织内的 Google Cloud 项目的方法。我正在尝试使用服务帐户导出的 json 凭据以这种方式实现此目的: // More info on the endp
我正在编写一些用于自动部署Azure网站的代码(包括在Azure中创建网站)。我正在使用 Nuget 中提供的 Azure 管理库和 Azure 资源管理库。大部分内容都已到位,但是我无法找到通过我见
我是一名优秀的程序员,十分优秀!