Código em Main () acessível ou inacessível dependendo abrir uma outra forma

StackOverflow https://stackoverflow.com/questions/479368

  •  20-08-2019
  •  | 
  •  

Pergunta

Eu tenho algum aplicativo Pocket PC e eu estou tendo um problema sério com ele descrito aqui: https://stackoverflow.com/questions / 472598 . Embora a procura de uma solução que eu tentei algum código realmente muito estúpido no Main ():

[MTAThread]
        static void Main()
        {
            Application.Run(new Tasks());
            Application.Exit();
        }

e ponto de interrupção conjunto na saída. se eu executar o aplicativo e em seguida, feche a janela do ponto de interrupção é atingido. se eu executar o aplicativo e, em seguida, abrir outra janela:

private void questButton_Click(object sender, EventArgs e)
        {
            QuestionnairesWindow questWindow = new QuestionnairesWindow();
            questWindow.Show();
            this.Hide();
}

e, em seguida, voltar com ele para a janela inicial:

private void backButton_Click(object sender, EventArgs e)
        {
            Tasks tasksWindow = new Tasks();
            tasksWindow.Show();
            this.Close();
        }

e fechar a inicial da mesma forma que a primeira vez, o código Apllication.exit () nunca é alcançado e eu tenho a impressão de que a aplicação não está realmente fechado (eu não posso abri-lo novamente). desculpe se a descrição é complicado

edit: a questão é - alguma idéia por que é comportar de maneira diferente

?
Foi útil?

Solução

new Tasks() em Main() não é o mesmo objeto com Tasks tasksWindow = new Tasks();

Você tem 2 objetos de tarefas, fechando assim segundo, primeiro ainda está presente e nunca morre. Você precisa passar para QuestionnairesWindow a referência do Tasks atual.

Você pode fazer isso com construtor QuestionnairesWindow adicional:

private Tasks tasks;

public QuestionnairesWindow(Tasks t)
{
  this.tasks = t;
}

usando:

new QuestionnairesWindow(this).Show(); // where this = current `Tasks` created in `Main`

Outras dicas

Esta linha parece ser o problema:

Tasks tasksWindow = new Tasks();

Se eu entender o seu código corretamente, em sua backButton_Click, você está criando um new instância de suas tarefas de forma, isntead de mostrar o que você originalmente escondeu. Isso significa que o aplicativo nunca termina, porque ainda há uma janela aberta, mas oculta.

O que você provavelmente quer fazer é passar as tarefas formar referência à forma QuestionnairesWindow.

O problema que tenho é que em backButton_Click você está criando um new instância da janela Tarefas. A janela Tarefas original ainda está em execução, é apenas escondido. Eu suspeito que você precisa para passar uma referência para as tarefas originais formar no QuestionnairesWindow para que ele possa optar por mostrá-lo novamente.

Você quer necessidade de adicionar um método público / interna no seu QuestionnairesWindow onde você define quais tarefas formam causou a QuestionnairesWindow para aberto. Você chamar esse método em questButton_Click com o este de referência antes de chamar this.Hide (). Essa referência será armazenado em uma variável privada dentro do QuestionnairesWindow.

Em seguida, no backButton_Click, você usar essa variável privada, para chamar o método .Show (), para mostrar o formulário pai.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top