1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[C#] Correr apenas 1 Processo/Instancia

Discussão em 'Programação' iniciada por DerEngel, 17 de Novembro de 2008. (Respostas: 7; Visualizações: 2538)

  1. DerEngel

    DerEngel Power Member

    Tenho um programa que basicamente abre uma imagem, quando se carrega 2x na imagem em questão (no explorer)

    Acontece que quando abrir outra imagem e se o programa estiver a correr, ele abre outro programa, ficando com 2 processos/instancias.

    O que queria fazer era basicamente o que o photoshop ou outro programa de imagens faz, abre sempre as imagens no processo que está a correr.

    Anyone ?

    Este é o código para abrir os ficheiros no programa pelo explorer:

    Código:
            static void Main(string[] args)
            {
    
                string Selected = "";
    
                if (args.Length > 0)
                    Selected = Convert.ToString(args[0]);
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
    
                Form1 app = new Form1();
                app.SelectedFile = Selected;
                Application.Run(app);
    
            }
    
     
    Última edição: 17 de Novembro de 2008
  2. owny

    owny Power Member

    Não ´sou PRO e vou mandar um bitaite para o ar mas pode ser que ajude

    Esta linha:
    tas a abrir novamente a form certo?
     
  3. DerEngel

    DerEngel Power Member

    Não, apenas estou a criar uma copia da Form1 com o nome app, o abrir é no fim com o Application.Run
     
  4. fLaSh_CF

    fLaSh_CF Banido

    Tens de ter em conta dois passos.
    1º Adquirir os parâmetros do processo;
    2º Verificar se já existe um processo activo (se a app já está a correr em outro processo)

    Para captar os parâmetros poens isto na class principal (onde inicia a app)
    Por ex: podes adquirir o directório da imagem..
    Código:
    //Verifica os parâmetros (isto é criado por o shell do windows)
    {
        string sCommand = Interaction.Command();
        
        if ((!string.IsNullOrEmpty(Interaction.Command()))) {
        }
        //Aqui porcessas os parametors..
    }
    
    De seguidas adicionas este codigo para verificar se já existe outra instancia da app a correr..
    Código:
    //Não permite executar várias vezes em simultâneo a aplicação.
    //Verifica se a aplicação, já está em execução.. se estiver obtem a dir temporaria defenida por o outro processo, converte o PDF e termina o processo..
    {
        if (Information.UBound(Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName)) > 0) {
            System.Environment.Exit(0);
        }
    }
    Hum http://www.bobpowell.net/singleinstance.htm bom código, a partir daí até podes sincronizar o processo =)

    Compr.
     
    Última edição: 17 de Novembro de 2008
  5. DerEngel

    DerEngel Power Member

    Boas,

    Tive a testar esse código e ele não me reconhece estes comandos:

    Error 1 The name 'Interaction' does not exist in the current context
    Error 1 The name 'Process' does not exist in the current context
    Error 1 The name 'Information' does not exist in the current context

    Tentei por o código em todo o lado, mas dá sempre isso.

    EDIT:

    Entretanto consegui só com um mutex ter só uma processo a correr, apenas tem um problema:

    Quando abro uma imagem pelo programa pela 1º vez ele abre a imagem
    A segunda que vou abrir outra imagem (com o programa aberto) não me abre mais nenhuma processo do programa, mas também não me abre a nova imagem no lugar da outra.
     
    Última edição: 19 de Novembro de 2008
  6. DerEngel

    DerEngel Power Member

  7. Baderous

    Baderous Banido

    O que tu quererás fazer não será criar um singleton, isto é, uma classe principal que tem apenas 1 instância (que corresponde à instância do programa que está a correr) e, dentro dela, abrir as várias imagens?
     

Partilhar esta Página