0

Visual Studio のメイン フォームでメモリ不足の問題が発生しました。理由がわかりません。プログラムの初期化中にプログレス バーを配置する必要があります。プログラムの他のフォームでは問題なく動作しますが、メインフォーム、それは私にメモリ不足エラーをスローします

メインフォームコードは次のとおりです。

    public MainForm()
    {
        checkinstance();

        ProgressDialog progressDialog = new ProgressDialog();

        Thread backgroundThread = new Thread(
            new ThreadStart(() =>
            {
                progressDialog.SetIndeterminate(true);                  
                InitializeComponent();
                progressDialog.BeginInvoke(new Action(() => progressDialog.Close()));
            }
        ));

        backgroundThread.Start();
        progressDialog.ShowDialog();
    }

ProgressDialog は、プログレス バーを含むフォームです。

ありがとう。

4

2 に答える 2

1

UI コントロールの初期化には時間がかかると思います。そのためInitializeComponent、バックグラウンド スレッドに入れています。

ただし、それは惨めに失敗し
ます。InitializeComponent は UI オブジェクトのインスタンスを作成します。UI オブジェクトは、UI スレッドからのみ呼び出すことができます。それは通常、それらが作成されたスレッドです。
その結果、バックグラウンド スレッドの外で UI オブジェクトにアクセスするすべてのコードで例外が発生します。

ここでは、まったく異なるアプローチを取る必要があります。メイン フォームの起動時に時間がかかる正確な原因を特定し、そのコードをバックグラウンド スレッドに配置する必要があります。

于 2013-02-06T10:54:41.333 に答える
0

みんなありがとう、私はハンドラー内で BackGroundWorker と ProgressBar を使用することになりました。同じ問題を抱えている可能性がある人にとって、これらは素晴らしい記事です

http://mycodelog.com/2010/02/11/busy/

[http://www.dotnetperls.com/progressbar]

http://theraneman.blogspot.com.br/2011/02/did-you-wish-backgroundworker-had.html (特にここ)

于 2013-02-06T13:18:43.183 に答える