Clipboard.SetText调用延迟5秒

时间:2012-08-24 08:26:57

标签: .net vb6 integration clipboard legacy

我可以通过遗留系统进行简单的调用,我非常简单的.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

1 个答案:

答案 0 :(得分:1)

运行Ouutlook和/或Word时,使用剪贴板将数据传输到Excel时,我在VB6上遇到了同样的问题。

问题出在Office上;您需要禁用向剪贴板中的复制多个项目 /以使其加速。

https://support.microsoft.com/en-ca/help/2817672/macro-takes-longer-than-expected-to-execute-many-individual-copy-and-p

希望获得帮助。