1

メイン UI フォームが C# に読み込まれる前に、多数の文字列 (1 つには +70,000 の値があります) を含むいくつかのコンボボックスを読み込んでいます。tabControl の別の tabPages にコンボボックスがあります。UI フォームが表示されたときに、タブとコンボボックスの表示に遅延がないように、これを行っています。

問題は、最初の tabPage がうまくいき、すぐに表示されることです。ただし、他のコンボボックスを含む他の tabPages は、完全にレンダリングされて表示されるまでに最大 10 秒かかります。

UI フォームをロードする前に CreateControl を使用してコントロール (コンボボックス) を作成しようとしましたが、役に立ちませんでした。C# の tabControls には、いわゆる「遅延読み込み」動作があることを理解しています。フォームが表示される前にコンボボックスが作成およびレンダリングされ、他のタブページに変更したときに遅延がないように、その「遅延」機能をどのように克服できるのでしょうか?

[タグを編集しました - これは WinForms 関連です。]

ありがとう、

4

1 に答える 1

0

スレッド化は、あなたの問題を克服するためのコンセプトになると思います。できることは、フォームの読み込み時に新しいスレッドを開始することです。スレッドにコンボ ボックスの入力または必要な作業をさせます。

このスレッドは、すべてのコンボ ボックスを非同期的に更新します。そのため、フォームが読み込まれるときに遅延はありません。スレッドの短い例を以下に示します。これはセントパーセントに役立つと思います!

public class MyClass
{
    private volatile bool _KillThread;

    // This method will be called when the thread is started.
    public void DoWork()
    {
        while (!_KillThread)
        {
            //Do your work
        }

    }
    public void RequestStop()
    {
        _KillThread= true;
    }

}

static void MyFunction()
{
        MyClassworkerObject = new MyClass();
        Thread workerThread = new Thread(workerObject.DoWork);

        // Start the thread.
        workerThread.Start();

        while (!workerThread.IsAlive);
             // allow the worker thread to do some work:
             Thread.Sleep(1);

        // Request that the worker thread stop itself:
        workerObject.RequestStop();

        //Wait untill the worker thread joins it self to main thread
        workerThread.Join();

}

1年前にアプリケーションに実装したときにそこからコードを参照したため、MSDNで同様の例を見つけることができます。

乾杯!!

于 2013-07-19T04:43:04.067 に答える