Cita de: rigorvzla en 26 Agosto 2018, 05:37 AMen caso de estar ya abierto el programa, no funciona el argumento cuando se usa.
Para transferir datos (un string con los nuevos argumentos) a un proceso ya en ejecución, tienes varias opciones a tu disposición, bien puedes aplicar cualquier metodología conocida de intercomunicación entre procesos (IPC), como por ejemplo un bloque de memoria compartida (Memory-Mapped File):
- https://docs.microsoft.com/en-us/dotnet/standard/io/memory-mapped-files
- https://docs.microsoft.com/en-us/dotnet/api/system.io.memorymappedfiles.memorymappedfile?redirectedfrom=MSDN&view=netframework-4.7.2
( el algoritmo de creación, lectura y escritura de datos en el bloque de memoria lo implementarías en el evento Startup de tu aplicación WPF, o en otros eventos de inicio de la aplicación. )
O bien puedes declarar una clase con una propiedad que tenga por nombre "Argumentos", e implementar una notificación de cambio de esa propiedad mediante la interfaz INotifyPropertyChanged:
- https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-implement-property-change-notification
- https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.data.inotifypropertychanged.propertychanged
...luego solo sería cuestión de suscribirse al evento INotifyPropertyChanged.PropertyChanged para notificar de nuevos argumentos command-line recibidos en tu aplicación.
Aplicar cualquiera de las soluciones que he mencionado realmente no es dificil pero logicamente requiere entendimiento y conocimiento, si no comprendes como hacerlo no te preocupes por que aquí abajo publiqué un ejemplo de implementación de la interfaz INotifyPropertyChanged que precisamente está enfocado para demostrar lo que tú quieres hacer, es decir, una aplicación de única instancia que pueda recibir y notificar de nuevos argumentos recibidos por linea de comandos, pues aquí abajo tienes la solución ya hecha por mi y completamente funcional:
...eso sí, como puedes ver el código está escrito en VB.NET y es para Windows Forms, pero no deberías encontrar ninguna complicación si usas cualquier conversor online de código de VB.NET a C#, y luego para adaptar el código de WinForms a WPF pues simplemente debes averiguar como puedes reemplazar lo que hago en el evento de aplicación StartupNextInstance por el evento equivalente en WPF, que no estoy seguro de si podrá ser en el evento Startup, pero bueno, con ese código de VB.NET tienes el 99% del problema ya resuelto, ahora te toca poner de tu parte para investigar como adaptar el código a WPF, aquí tienes la información con respecto a todos los eventos disponibles en una aplicación WPF:
Con las indicaciones que te he dado debería ser suficiente, me refiero, implementar la interfaz INotifyPropertyChanged, no necesitas hacer más, aun así, por si te interesa aquí abajo publiqué un ejemplo de uso de la clase MemoryMappedFile para...
( logicamente el ejemplo requiriría pequeñas adaptaciones para cumplir con el propósito que le quieres dar, pero el concepto ahí lo puedes ver. )
Saludos.