Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 23540|Resposta: 2

[Fonte] Explicação detalhada de várias maneiras de resolver o problema de um programa C# que permite a execução de apenas uma instância

[Copiar link]
Publicado em 08/12/2016 13:11:13 | | |

Método 1:
Use variáveis mutex de thread. Defina variáveis mutex para determinar se uma instância está em execução.
Mude a função Main() no arquivo program.cs para o seguinte código:




Nota: No programa, a instrução System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); para criar uma variável mutex, executar, onde "single_test" é o nome mutex, e quando esse método retorna, se um mutex local ou um sistema de nomenclatura especificado for criado, o valor booleano runone é verdadeiro; false se o sistema de nomenclatura especificado mutexe já existir. Mutexes nomeados são abrangentes em todo o sistema.
Método 2: Use a forma de julgar o processo, antes de executarmos o programa, encontramos se há um processo com o mesmo nome no processo, e se a posição de execução também é o mesmo processo. Aplique a classe Process no namespace System.Diagnostics em C# para implementá-la, o código principal é o seguinte:
1. Adicionar uma função ao arquivo program.cs da seguinte forma:




2. Alterar a função Principal () para o seguinte código:




Método 3: Método atômico global, antes de criar um programa, verifique primeiro a tabela atômica global para ver se há um átomo específico A (adicionado no momento da criação) e pare de criá-lo quando ele existe, indicando que o programa executou uma instância; Se não existir, execute o programa e queira adicionar um átomo específico A à tabela atômica global; Ao sair do programa, lembre-se de liberar um átomo específico A, caso contrário, ele não será liberado até que o computador seja desligado. A implementação do C# é a seguinte:
1. Declarar a interface da função WinAPI

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
externo estático público UInt32 GlobalAddAtom(String lpString); Adicionar átomos
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
externa estática pública UInt32 GlobalFindAtom(String lpString); Encontre átomos
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
externo estático público UInt32 GlobalDeleteAtom(UInt32 nAtom); Exclua átomos
2. Modificar a função Main() da seguinte forma:




3. Adicione o seguinte código ao evento FormCloseded:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Exclua o "jiaao_test" atômico
--------------------------------------*-------*--------*-----------------------------------------------
O acima é a ideia geral básica de criar um programa mutuamente exclusivo, e eu pessoalmente acho que o primeiro método é o mais simples.




Anterior:Diferença entre Directory.GetCurrentDirectory e Application.StartupPath
Próximo:A diferença entre o perfil de cliente .Net Framework4 e .Net Framework4.0
Publicado em 10/07/2017 06:31:21 |
Obrigado por compartilhar
 Senhorio| Publicado em 23/07/2024 14:21:04 |
Programas C# permitem que apenas uma instância execute o código correto
https://www.itsvse.com/thread-3391-1-1.html
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com