5 segundos de retraso de la llamada Clipboard.SetText
Frecuentes
Visto 346 veces
1
Tengo una llamada simple del sistema heredado, mis llamadas de aplicación .NET win muy simples
Clipboard.SetText("small data portion")
Esta llamada dura 5 segundos. Las próximas llamadas de SetText funcionan bien.
La parte más importante (en mi humilde opinión) del código de la persona que llama (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
Preguntas 2:
¿Cuál es la razón del retraso del portapapeles?
Cómo solucionarlo (pero el proceso de llamada debe: bloquearse: la llamada de llamadas que no bloquean funciona bien)?
código de ejemplo:
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 )
Resultados:
00: 00: 05.0130000
00: 00: 00
00: 00: 00
1 Respuestas
1
Tuve el mismo problema durante años con VB6 cuando usaba el portapapeles para transferir datos a Excel cuando Outlook y/o Word se estaban ejecutando.
El problema es con Office; necesitas deshabilitar el copiar varios elementos hacia/desde el portapapeles para acelerarlo.
Espero que esto ayude.
respondido 27 nov., 18:19
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas .net vb6 integration clipboard legacy or haz tu propia pregunta.
Recientemente me enfrenté a un problema muy similar, espero que alguien responda ... - brovar
Supongo que en realidad está cronometrando el retraso de la llamada WaitForSingleObject, no el retraso del portapapeles. Un inicio en frío de .NET puede tardar fácilmente 5 segundos. La próxima vez que ejecute el proceso obtendrá un buen comienzo, una gran diferencia. La única solución es un disco más rápido o calentar artificialmente el caché del sistema de archivos. - Hans Passant
@HansPassant: No es un problema con la máquina. - PiotrB
@HansPassant: Sucede siempre. - PiotrB
Gracias, eso aclara bastante las cosas. Entonces, no parece que haya un problema de VB6 aquí. - Bob77