【解決方法】メッセージボックスC#の前にWinformが表示されない


以下のコードがあります

C#
frmLogin objfrmLogin = new frmLogin();
objfrmLogin.ShowDialog();
//Some more lines of code to check session
MessageBox.Show("Some message","Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);

私が直面している奇妙な問題は、最初に frmLogin フォームを表示する代わりに、セッションが存在するかどうかを確認する以下のコードが実行されていることです。

そのため、アプリは常にログイン フォームを表示せずに起動および終了します。

私が試したこと:

フォーム show コードの下にセッション チェック コードをコメントしました。 セッションが存在せず、15 秒後にアプリが終了するため、すべてのコントロールが無効になっているメイン フォームが表示されるだけです。

解決策 1

ユーザーがサインインしているかどうかを確認するロジックはどこにありますか? ここにあなたのためのチュートリアルビデオがあります: C# 2020 でログインフォームを作成する方法 – YouTube[^]

更新しました

コードをいつ実行しているかがわからないため、いつとは言えません。 以下に示すように、フォームをロックします。

C#
private void Form1_Shown(object sender, EventArgs e)
{
    // do login here, after the form is loaded and shown.
}

例:

1. メインフォーム:

C#
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Shown(object sender, EventArgs e)
    {
        frmLogin objfrmLogin = new frmLogin();
        objfrmLogin.ShowDialog();
    }

2. ログインフォーム:

C#
public partial class frmLogin : Form
{
    public frmLogin()
    {
        InitializeComponent();
    }

    private void frmLogin_Shown(object sender, EventArgs e)
    {
        _ = DummyCheckinLogic();
    }

    private async Task DummyCheckinLogic()
    {
        await Task.Delay(1000).ConfigureAwait(false);
        // unload the login windows (self)
    }
}

解決策 2

あなたの frmLogin には、これを引き起こす何かがあるに違いありません。おそらくタイマーですか?
あなたのコードを示さなければ、私たちは推測することしかできません。
代わりに、標準の Windows フォームを試してみて、何が起こるかを確認してください。
または、frmLogin にブレークポイントを設定し、フォームを閉じる原因となるエラーが表示されるまでステップスルーします。
また、try .. catch 構造をコメント アウトして、エラーが表示されないようにすることもできます。

解決策 3

C#
frmLogin objfrmLogin = new frmLogin();
objfrmLogin.ShowDialog();
//Some more lines of code to check session
MessageBox.Show("Some message","Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);

fromLogin コードのどこかに問題があるか、タスクまたはスレッドで何かを間違って実行しています。

ShowDialog はブロッキング呼び出しであるため、ダイアログが閉じられるまでコードは実行されません。 fromLogin コードまたはタスクまたはスレッドで非常に間違ったことをしている場合を除きます。

コメント

タイトルとURLをコピーしました