2013-05-03 39 views
6

è possibile eseguire il metodo nel nuovo processo figlio? Nel mio esempio posso eseguire metodo Run, che eseguirà il metodo doAction privata nel nuovo processo (non filo!)Metodo esecuzione in un nuovo processo

public class MyClass 
{ 
    public void Run() 
    { 
     //what should I do there to run 'doAction' in new process? 
     doAction(); 

    } 

    private void doAction() 
    { 
     ... 
    } 
} 
+2

Perché Thread non è sufficiente? Perché dovresti mai avere 2 'myprogram.exe' in esecuzione in una sola volta, solo per eseguire un metodo? (anche se è possibile.) – sircapsalot

+0

La mia domanda è piuttosto curiosità che vero problema. Voglio sapere è possibile – Jacek

+0

Per capire meglio questo problema, penso che abbiamo bisogno di capire meglio il tuo modo di pensare globale - dicci cosa stai cercando di ottenere (non tecnicamente ma dal punto di vista della funzione) in modo che possiamo capire meglio. –

risposta

1

processi non condividono la memoria e richiedono un meccanismo tra loro di comunicare. È possibile utilizzare uno dei pochi meccanismi di varietà per questo:

  1. file o dei dati - un processo scrive un file o DB, l'altro legge da e esegue un metodo in base ai dati o file di contenuto
  2. Servizio host/client - utilizzare WCF, .NET Remoting, Named Pipes o direct Meccanismo di comunicazione TCP/IP dove un processo ospita un'implementazione dell'interfaccia del servizio e il processo chiamante (il client) utilizza un proxy dell'interfaccia di servizio per serializzare e comunicare la chiamata al processo host - questo è l'approccio migliore se si desidera una richiesta/risposta di stato Interazione
  3. coda
  4. Messaggio - utilizzare una coda di messaggi come MSMQ in cui un unico processo invia un messaggio alla coda e gli altri lo prende ed esegue il metodo

Sono sicuro che ci sono altri, ma questi sono i tre metodi più comuni.

Il mio preferito è uno scenario host/client di servizio leggero. Ci sono diverse utility leggere per rendere questo più facile per te. È possibile utilizzare RemotingLite o la mia propria estensione di RemotingLite che supporta Named Pipes denominata DuoVia.Net.

Problemi correlati