- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试将一个项目拖出到资源管理器中。
该项目应该导致文件下载,所以我使用了我在网上找到的一个示例,使用 CustomDataObject
下载文件,当他实际需要流时调用一个事件,然后我的应用程序负责繁重的工作并执行下载。
它在类似的剪贴板操作中一直运行良好。
实际的文件下载也会导致我的应用程序中的一些 UI 发生变化。主要是在表单上更改的“工作”图标,以及在出现错误时弹出的气球。
在剪贴板操作中,我只是在需要时使用了 InvokeRequired
和 BeginInvoke
,以确保这些 UI 更改发生在主线程上。在拖动操作中,UI 线程正在等待 DoDragDrop
的返回,而 CustomDataObject
引发的事件正在另一个线程上调用。当我尝试调用 BeginInvoke
或 Invoke
时,UI 线程仍在等待,我无法完成放置。
是否有关于如何在访问源应用程序的 UI 时允许跨应用程序拖放的示例或推荐的最佳实践?
here是原始的 CodeProject 文章,其中包含我为自己使用而修改的 DataObjectEx
。我只是更改了 GetFileContents
方法来调用一个虚拟方法,该方法返回一个包含文件数据的 Stream
,从类继承,并覆盖该虚拟方法以从网。当我想在获取文件的同时更改 UI 中的内容时,问题就出现了。正如我之前所说 - 主 UI 线程仍然“卡在”DoDragDrop
方法调用中,因此我无法按时调用它来执行工作线程在下载前后所需的 UI 更改文件。
最佳答案
如果这是一个标准的 WinForms 应用程序,那么您真正需要在您的应用程序中做的就是在您的表单中为 DragEnter 和 DragDrop 添加事件处理程序。
在 DragEnter 内部,您需要检查对象的类型以确保它是一个文件名:
private void MyForm_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = e.Data.GetData(DataFormats.FileDrop) as string[];
if (files != null)
{
// Do additional checks here if needed, like check extensions
e.Effect = DragDropEffects.Copy;
return;
}
}
e.Effect = DragDropEffects.None;
}
然后在您的 DragDrop 处理程序中,我将简单地存储文件名,然后激活一个计时器。这允许 DragDrop 立即返回,以便其他应用程序(在您的示例中为 Windows 资源管理器)不会在您对文件进行任何处理时挂起,这可能需要一些时间。在 DragDrop 完成之前,拖动源不会返回。
private void MyForm_DragDrop(object sender, DragEventArgs e)
{
string[] files = e.Data.GetData(DataFormats.FileDrop) as string[];
if (files != null)
{
_filesToProcess.Text = files[0]; // Assuming this is declared at the Form level
// Schedule a timer to fire in a few miliseconds as a simple asynchronous method
_DragDropTimer.Interval = 50;
_DragDropTimer.Enabled = true;
_DragDropTimer.Start();
Activate(); // Activates the form and gives it focus
}
}
关于c# - 拖入另一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036452/
我是 iOS 新手,我不知道该怎么做,我想实现类似个人资料编辑动画的 Tinder。 例如, 我可以将图像拖到其他 UIImageView 或 UICollectionView 中,并将 Collec
我在项目中使用gridster.net,但遇到了问题。 我试图让小部件仅在单击后按住鼠标一秒钟后才开始拖动。我正在使用下一个代码: $(".gridster .gs-w").on('mousedown
我想用 LibGDX 中的鼠标拖动一个Actor。我的代码: // overrides in the ClickListener @Override public bo
为什么当我将我的 gif 拖到单元格中时表格会变形?我该如何解决?当我将 gif 拖到单元格中时,我希望表格(和每个单元格)保持原来的大小。 这是我的情况的一个 jsfiddle: http://js
当设备转向横向时,一些控件离开 viewController,我无法将其拖到 viewController。 最佳答案 就像您在屏幕截图上看到的那样,您的约束无效,这可能是个问题。如果您使用 Stor
我在单击 JButton 时将 JPanel 添加到 JFrame。它将 JPanel 添加到框架中。该按钮将在点击事件中继续将 JPanel 添加到 JFrame。没有限制。单击按钮时,我也将 JP
我有一个 NSCollectionView 显示内部存储的图像(即不是文件)。集合显示正确。但是,当我开始拖动操作时,应用程序崩溃了。它在拖动离开 Collection View 之前崩溃。我正在返回
我正在尝试解决 iPhone 上拖放的基本问题。这是我的设置: 我有一个 UIScrollView,它有一个大的内容 subview (我可以滚动和缩放它) 内容 subview 有几个小块作为 su
我今天遇到了一个小问题,我想我可以试试堆栈溢出。我会简短而贴心(我删除了很多代码以明确这一点)。 我最近发现了 raphaeljs,我喜欢它。我制作了一些可拖动的圆圈,它像这样工作得很好: 工作脚本:
我是 iOS 开发的新手,想使用分组的 UITableView 和 UITabelCell 来创建一个简单的表单来布置表单的内容。我想在 XCode5 中以交互方式执行此操作。 我的问题是,在将 UI
您好,我是 iOS 编程的新手,想知道将 UIView 拖到 Storyboard 中并以编程方式创建它们之间有什么区别。我正在使用 iPad 进行开发。我有一个 UISplitView。在 Appd
A = 父 NSView;B = 子 NSView; B有一个小的NSTrackingArea;B是A的一个小 subview ; 如果在空白区域中移动、单击、拖动,A 会正确接收 mouseMove
我正在尝试实现自定义 QGraphicsScene,当我们按下左键时,它允许拖动一个项目,为此我使用 QDrag 并传递项目数据,然后覆盖 dropEvent 事件,我在其中获取元素和 dropEve
我是一名优秀的程序员,十分优秀!