Clipboard.SetText 调用延迟 5 秒
Posted
技术标签:
【中文标题】Clipboard.SetText 调用延迟 5 秒【英文标题】:5 seconds delay of Clipboard.SetText call 【发布时间】:2012-08-19 19:11:28 【问题描述】:我有来自遗留系统的简单调用,我非常简单的 .NET win 应用调用
Clipboard.SetText("small data portion")
此通话持续 5 秒。下一个 SetText 调用工作正常。
最重要的(恕我直言)调用方代码(VB6):
SAAttr.nLength = Len(MySAAttr)
SAAttr.bInheritHandle = 1
SAAttr.lpSecurityDescriptor = 0
CreatePipe StdOutR, StdOutW, SAAttr, 0&
SetHandleInformation StdOutR, HANDLE_FLAG_INHERIT, 0&
CreatePipe StdInR, StdInW, SAAttr, 0&
SetHandleInformation StdInW, HANDLE_FLAG_INHERIT, 0&
start.cb = Len(start)
start.hStdOutput = StdOutW
start.hStdError = StdOutW
start.hStdInput = StdInR
start.dwFlags = STARTF_USESTDHANDLES
ret = CreateProcess(0&, cmdline, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS + _
CREATE_NO_WINDOW, 0&, 0&, start, proc)
ret = WaitForSingleObject(proc.hProcess, pTimeout)
CloseHandle StdOutW
2 个问题:
剪贴板延迟的原因是什么?
如何解决(但调用进程必须被阻塞 - 来自非阻塞调用的调用工作正常)?
示例代码:
Dim start1 As DateTime = Now
Clipboard.SetText("simple data")
Dim start2 As DateTime = Now
Clipboard.SetText("simple data")
Dim start3 As DateTime = Now
Clipboard.SetText("simple data")
MessageBox.Show( (start2 - start1).ToString() & vbCrLf & _
(start3 - start2).ToString() & vbCrLf & _
(Now - start3).ToString() & vbCrLf )
结果:
00:00:05.0130000
00:00:00
00:00:00
【问题讨论】:
我最近遇到了非常相似的问题,希望有人能回答... 我猜你实际上是在计时 WaitForSingleObject 调用延迟,而不是剪贴板延迟。 .NET 冷启动很容易需要 5 秒。下次你运行这个过程时,你会得到一个热启动,很大的不同。唯一的解决方法是更快的磁盘或人为地预热文件系统缓存。 @HansPassant : 不是机器的问题。 @HansPassant :每次都会发生。 谢谢,这说明了很多事情。听起来好像根本没有 VB6 问题。 【参考方案1】:多年来,当 Ouutlook 和/或 Word 运行时,使用剪贴板将数据传输到 Excel 时,我在使用 VB6 时遇到了同样的问题。
问题在于 Office;您需要禁用 copy multiple item to/from剪贴板以加快速度。
https://support.microsoft.com/en-ca/help/2817672/macro-takes-longer-than-expected-to-execute-many-individual-copy-and-p
希望对您有所帮助。
【讨论】:
以上是关于Clipboard.SetText 调用延迟 5 秒的主要内容,如果未能解决你的问题,请参考以下文章
vb中使用“Clipboard.SetText Text1.Text”复制的内容,怎么粘贴在记事本不起作用????