delphi - 在工作线程中使用 SHFileOperation 是否安全?

标签 delphi winapi thread-safety windows-shell shfileoperation

我想要

  • 一个后台线程将通过 SHFileOperation 函数复制文件,一次始终只有一个 SHFileOperation (但我希望它位于线程中)<
  • 我需要 UI 输出,因此需要使用 FOF_SIMPLEPROGRESS 标志并将某些内容传递给 Wnd 成员

我有两个问题

  1. 从除 main 之外的线程调用带有 FOF_SIMPLEPROGRESS 标志(用于用户交互)的 SHFileOperation 是否安全?
  2. 如果是,我应该将什么句柄传递给 Wnd 成员?我已经尝试过主窗体的句柄,但是当例如弹出覆盖确认对话框,你确认一下,主窗体就发送到后台了,真是奇怪

注意: 我有一个用于这些操作的队列,因此一次只执行一个 SHFileOperation (完成后,线程继续执行另一操作,可能是下一个 SHFileOperation )

非常感谢

最佳答案

  1. 从主线程以外的线程调用 SHFileOperation 是完全安全的。
  2. 我会将 0 作为 hwnd 成员传递。如果您传递主窗口的句柄,那么我预计该窗口将被禁用,因为 SHFileOperation 是一个模式对话框。由于文件确认和进度对话框是后台线程的顶层 UI,因此您不希望在显示这些模式对话框时禁用任何窗口。

关于delphi - 在工作线程中使用 SHFileOperation 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9483588/

相关文章:

delphi - 为什么 TImage 旋转我的图像?

delphi - TForm 上的 RTTI GetFields 和 GetAttributes

德尔福 : multiply integer with real number(newbie)

delphi - 安装组件的最佳方法是什么?

c - 为什么SetWindowLongPtr在处理WM_CREATE消息时总是返回零?

c++ - 具有线程 vector 和队列 C++ 的管道

c# - 如何在另一个线程填充它时枚举 IEnumerable

windows - 从 Windows 8 中的 Windows 服务( session 0)向登录屏幕发送输入或类似内容

c# - LVM_GETCOLUMN 只返回第一列的信息

multithreading - SQLite3 中表的线程安全和并发修改