5

AllocConsole()は、winform アプリケーションでコンソールを開くために使用します。

コンソールを閉じたときにアプリケーションが終了しないようにするにはどうすればよいですか?

編集

随時更新される完了率は、コンソールに表示したいものです

    void bkpDBFull_PercentComplete(object sender, PercentCompleteEventArgs e)
    {
        AllocConsole();
        Console.Clear();
        Console.WriteLine("Percent completed: {0}%.", e.Percent);
    }

代わりにrichtextBoxを試しました

       s =(e.Percent.ToString());
       richTextBox1.Clear();
       richTextBox1.AppendText("Percent completed:  " +s +"%");

しかし、私は時々完了率の更新を見ることができません。100% 完了した場合にのみ表示されます。

代替案はありますか?

4

3 に答える 3

1

これはめったに現れないタスクであることは知っていますが、似たようなことがあったので、いくつかのハックを行うことにしました。

http://social.msdn.microsoft.com/Forums/vstudio/en-US/545f1768-8038-4f7a-9177-060913d6872f/disable-close-button-in-console-application-in-c

-カスタム コンソール アプリケーションの [閉じる] ボタンを無効にします。

あなたのテキストボックスソリューションも同様に機能するはずです。メインスレッド上にあるフォームを結びつけているメインスレッドから関数を呼び出しているように聞こえ、テキストボックスを更新するときに悲しみを引き起こしています。新しいスレッドを作成し、イベント ハンドラーを使用してテキスト ボックスを更新するか、新しいスレッドから呼び出しメソッドinvoker を使用してテキスト ボックスを更新することを検討してください。これを完了する方法については、既に回答された質問から以下のリンクを参照してください。

メインスレッドのテキストボックスを別のスレッドから更新するには?

public class MainForm : Form {
    public MainForm() {
        Test t = new Test();

        Thread testThread = new Thread((ThreadStart)delegate { t.HelloWorld(this); });
        testThread.IsBackground = true;
        testThread.Start();
    }

    public void UpdateTextBox(string text) {
        Invoke((MethodInvoker)delegate {
            textBox1.AppendText(text + "\r\n");
        });
    }
}

public class Test {
    public void HelloWorld(MainForm form) {
        form.UpdateTextBox("Hello World"); 
    }
}
于 2013-08-20T17:14:05.343 に答える