2017-12-15 21 views
0

LoadNewQCDetails();のメソッドが進行中の間にフォームをフリーズしようとしています。 LoadNewQCDetails();メソッドの完了後にUIが無効/中断されても、ユーザーによるすべてのクリックイベントが発生します。したがって、 LoadNewQCDetails();プロセスが完了するまで、ユーザーがUI内の何かをクリックできないようにフォームをフリーズする必要があります。フリーズするウィンドウのフォームC#

マイコード:

private void button5_Click(object sender, EventArgs e) 
    { 
    //this.SuspendLayout(); 
    //this.Enabled = false; 
    button3.Enabled = false; 
    tabControl1.Enabled = false; 
    groupBox1.Enabled = false; 
    groupBox2.Enabled = false; 
    groupBox3.Enabled = false; 

    GlobalVariable.RefreshArtiCnt = 0; 

    if (comboBox2.Text != "") 
    { 
     // LoadAllQCDetails(); 

     //this function takes nearly 1 minute to complete task 
     LoadNewQCDetails(); 
    } 
    else 
    { MessageBox.Show("Data not found for this condition", "Alert"); } 



    button3.Enabled = true; 
    tabControl1.Enabled = true; 
    groupBox1.Enabled = true; 
    groupBox2.Enabled = true; 
    groupBox3.Enabled = true; 

    //this.Enabled = true; 
    // this.ResumeLayout(); 
} 
+0

フォームが完全に読み込まれるまでフォームを表示しないでください。長いコードを 'OnShowing'イベントに追加して、データが大きい場合にはasyncをロードするように呼び出すことができます。バム...!シンプルな修正、またはこのメソッドが 'LoadNewQCDetails();を完了するのに時間がかかる場合、タイマー付きのカスタムフォームを作成し、ShowDialog()メソッドを使用してそのフォームモーダルを表示し、エンドユーザーに辛抱強くなるよう警告します読み込みに数分かかります.. 'LoadNewQCDetails();'メソッドはどのように見えますか?最初に非同期にロードすることができます – MethodMan

+0

はLoadNewQCDetailsに大きなループまたはクエリが含まれていますか? –

答えて

0
this.hide() 
//shows the main page 
    LoadNewQCDetails(); 
this.show() 
0

パネル内のすべてのコントロールを追加し、偽= panel.enabledを行います。あなたのメソッドとpanel.enabled = trueを呼び出す直前。メソッド呼び出しの後。

関連する問題