1

レガシー システムからの単純な呼び出し、非常に単純な .NET win アプリケーション呼び出しがあります。

Clipboard.SetText("small data portion") 

この呼び出しは 5 秒間続きます。次の SetText 呼び出しは正常に機能します。

発信者コードの最も重要な (IMHO) 部分 (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

4

1 に答える 1

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

この助けを願っています。

于 2018-11-27T19:12:55.417 に答える