Tengo un botón en una hoja de Excel que inicia un nuevo subproceso para hacer algo de procesamiento. Si deseo hacer algún cambio en Excel (por ejemplo, escribir datos en una celda usando Worksheet.Range("A1").Value = "info";
), creo que debo usar el hilo de la interfaz de usuario principal.VSTO: invocación en el subproceso principal de Excel
¿Cómo se puede hacer esto?
Típicamente en Winforms que yo llamaría Invoke
en un control, pero los Excel.Application
o Worksheet
o Range
objetos no tienen un método Invoke
.
Gran respuesta. He estado golpeando mi cabeza en una pared por algo similar (xll add-in) y esto lo solucionó. Si bien el trabajo no "necesita" hacerse en el hilo de la interfaz de usuario como dices, si lo haces en otro hilo, probablemente encontrarás que Excel.exe todavía está dando vueltas en el Administrador de tareas después de cerrar la aplicación. –
Para cualquier otra persona confundida con 'Dispatcher', debe agregar una referencia a' WindowBase' para acceder a la clase 'Dispatcher'. – dotNET
El problema que tuve al invocar desde un hilo diferente fue que Excel a menudo estaba ocupado y lanzó una COMException. Esto lo resolvió. – Laurent