来自另一个线程的 DoDragDrop()

2023-11-30

每次我想让用户拖动一个控件时,我都会调用该控件的 DoDragDrop 。

拖放工作正常,但我对周围的事情有问题:

  1. DoDragDrop 完全阻塞表单,没有计时器事件跳转,没有处理绘制消息。

  2. DoDragDrop 不仅会阻止拖放操作,还会阻止目标程序完成拖放事件(即 explorer.exe 的糟糕代码)。依赖其他程序的代码很糟糕。

我想从新线程调用 DoDragDrop 。

尝试过这个:

Thread dragThread = new Thread(() =>
{
    Form frm = new Form();
    frm.DoDragDrop("data", DragDropEffects.All);
});

dragThread.SetApartmentState(ApartmentState.STA);
dragThread.IsBackground = true;
dragThread.Start();

但它似乎不起作用。我的意思是:当像这样从其他线程执行 DoDragDrop 时,我的程序或其他程序中的其他控件不会接收拖放消息。

还有其他解决方案吗?


The 拖放操作方法停止处理事件,直到第一个鼠标事件(例如鼠标移动)。所以我发现的解决方法非常简单 - 您只需要在调用 DoDragDrop 之前使用相同的鼠标位置模拟鼠标事件:


void XYZControl_MouseDown(object sender, MouseEventArgs e)
{
    var senderControl = (Control) sender;
    ...
    Cursor.Position = senderControl.PointToScreen(new Point(e.X, e.Y));   // Workaround!
    if (DoDragDrop(senderControl, DragDropEffects.Move) == DragDropEffects.Move)
    {
    ...
    }
....
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自另一个线程的 DoDragDrop() 的相关文章

随机推荐

  • 使用 Google Apps 脚本和 Gmail API 将附件添加到 Gmail 草稿

    我尝试在使用 Google Apps 脚本和 GMail API 创建的 Gmail 草稿中自动附加来自 Google 云端硬盘的文件 最好带有文件 ID 我使用下面的语法 我可以轻松做到吗 顺便说一句 创建草稿效果很好 谢谢 克里斯 fu
  • IntelliJ 在打字过程中编译时将 .class 文件放在哪里

    IntelliJ 是否一直在编译 因为当出现错误时它会用红色波浪线告诉我 除了自动完成功能之外 或者它正在执行某种伪编译 如果它正在进行合法编译 那么它会将这些已编译的类放在哪里 我想将我的 JRebel 指向该目录而不是单个模块目标文件夹
  • achartengine jar 文件中的问题

    我创建了一个应用程序 在其中使用过achartengine构建图表 它运行正常 但今天我看到了更新android SDK to r17 一旦我更新了 SDK 我构建的应用程序就开始崩溃 logcat 中出现以下错误报告 为什么会发生这种情况
  • GNU autoconf/automake 的帮助脚本应该放在哪里?

    我正在开发一个将与 GNU autoconf automake 一起分发的项目 并且我有一组调用 awk 脚本的 bash 脚本 我希望 bash 脚本最终出现在 PATH 中 而不是 awk 脚本中 我应该如何将它们插入到项目中 它们应该
  • 如何使用 python 持续监控节奏盒的音轨变化

    我想使用 python 监控 Rhythmbox 中曲目的变化 我想不断检查轨道的变化 并在轨道发生变化时执行一组函数 我编写了一段代码 它从 dbus 获取 Rhythmbox 接口并获取当前曲目详细信息 但必须手动运行该程序来检查是否有
  • R trycatch() 与 err 和 warn 处理程序就位,但 Shiny 仍然崩溃?

    重现 app R library shiny library RODBC savefunc lt function conn lt odbcConnect put in a conn string u know works df data
  • 当应用程序从暂停状态返回时,如何发现应用程序冻结原因?

    我的应用程序面临着一个非常奇怪的行为 App正常启动 我将应用程序留给另一款应用程序 或者返回到手机的主屏幕 当我尝试返回到上一个应用程序实例时 它会挂起 直到我收到 应用程序没有响应 强制其关闭 我知道这听起来像是一些内存泄漏或循环卡住的
  • Android自定义gridview布局(textview与imageview在顶部)

    我正在尝试弄清楚如何为我的游戏创建网格视图的布局 我有一个 gridview 将作为级别选择器 目前 我将每个 gridview 项目作为 TextView 仅显示级别编号 1 2 3 等 我想在文本视图的顶部添加 3 个图像视图 并能够操
  • 如何从命令提示符以“以管理员身份运行”运行应用程序? [关闭]

    Closed 这个问题是无关 目前不接受答案 我有一个名为的批处理文件test bat 我正在调用以下说明test bat file start min powershell exe sysdrive testScripts testscr
  • Django:模型名称冲突

    我正在尝试在我的项目中使用不同的开源应用程序 问题是两个不同的应用程序使用相同的模型名称并具有自己的模型定义 我尝试使用 class Meta db table db name 但没有成功 我在syncdb 上仍然遇到字段名称冲突错误 有什
  • 类型错误:无法读取 AngularJS 指令中未定义的属性“childNodes”

    我正在 AngularJS 中制作一个指令 Tab Slide Out 如下所示 angular module myApp directive tabSlideOut window document timeout function win
  • 在matlab中改变音频wav文件的音高?

    如何在 matlab 中改变音频信号的音调 本质上我只是想改变音频信号的原始质量而不做巨大的改变 我尝试使用原始输入音频通过稍微改变其质量来模拟合唱 以便我可以使用音频的多种变体来模拟合唱 最简单的方法可能是相位声码器 您可以在这里找到一种
  • 如何在 ASP.Net 站点中启用 FCKeditor 的实时预览?

    Over in this对于这个问题 Scott 写道 可以通过使用来获取 FCKeditor 中写入内容的当前 HTMLFCKeditorAPI Instances instanceNameHere GetHTML 有人可以提供有关如何在
  • Android:如何混合 2 个音频文件并使用 soundPool 重现它们

    我正在尝试开发一个 Android 应用程序 它使用一些声音并将它们混合在一起来创建音乐作品 一开始 我尝试同时再现声音 但是当我这样做时 它们变得不同步 在阅读论坛几个小时后 我意识到在循环模式下同时再现多个声音的最佳方法就是将音频文件合
  • 使用 matplotlib 和 pandas 库绘图不清楚

    有什么解释为什么我会得到这样的情节吗 指数回报的范围是从 100 到 130 我需要帮助来理解上面的这个图 代码很简单 但是情节不太清晰 import needed library import numpy as np import mat
  • 用于 IOS 开发的 QMessagebox 的任何替代解决方案(仅限 QWidget 应用程序)?

    我正在使用 Qt 5 3 并尝试为 IOS 开发应用程序 问题是 iPhone Retina 模拟器中的 QWidget 应用程序 QMessage 变为全屏 在应用程序输出面板中我看到 此插件不支持 传播大小提示 因此正在寻找 QMess
  • java 可以在对象仍在作用域内时终结该对象吗?

    我一直在研究代码中的一个错误 该错误似乎是由一些 丑陋 的终结器代码引起的 代码大致是这样的 public class A public B b new B Override public void finalize b close pub
  • sql server奇怪的Identity增量

    我在 SQL Azure 上设置了这个表 CREATE TABLE dbo Sl ID int IDENTITY 1 1 NOT NULL PublicId uniqueidentifier NOT NULL CONSTRAINT Prim
  • 如何从 MS Word 创建 PCL 文件

    如何创建类似于现有 MS 文档的新 PCL 文件 我有 MS 文档模板并将其替换为实际数据 我需要实现相同的 PCL 格式 创建 PCL 文件作为模板并将其替换为数据库中的实际值并将其发送到传真 安装新打印机 当询问端口时 创建一个 本地端
  • 来自另一个线程的 DoDragDrop()

    每次我想让用户拖动一个控件时 我都会调用该控件的 DoDragDrop 拖放工作正常 但我对周围的事情有问题 DoDragDrop 完全阻塞表单 没有计时器事件跳转 没有处理绘制消息 DoDragDrop 不仅会阻止拖放操作 还会阻止目标程