2016-10-10 4 views
-1

私は、たくさんのTextfileを生成する能力を持つプログラムを持っていて、プログラムがスレッドを生成しているときにフォームにローディングアニメーションを入れたい。だから私はGoogleに.gifローディングイメージをダウンロードし、プログラムがコマンドを実行する前にそれを表示することにしたのです。しかし、それは表示されていません。この問題を手伝ってもらえますか?それは最小限ですが、私はそれを解決することはできません。事前にありがとうスレッドが始まる前に画像を表示するC#

private void btn_Generate_Click(object sender, EventArgs e) 
    { 
     pic_Loading.Visible = true; 
     if ((dt_To.Value - dt_From.Value).TotalDays >= 0) 
     { 
      for (var day = dt_From.Value; day <= dt_To.Value; day = day.AddDays(1)) 
      { 
       string path = txt_path.Text + @"\" + day.ToString("yyyy"); 
       BLL.CreateFolder.CreateNewFolder(path); 
       if (chk_txtFile.Checked == true) 
       { 
        BLL.InsertData.InsertDailySales(txt_Server.Text, cbo_Databasename.Text, txt_Uname.Text, txt_Password.Text, day.ToString("yyyy/MM/dd"), txt_texttenant.Text, txt_StoreKey.Text, "p_Aya_insert_daily"); 
        BLL.InsertData.InsertDailySales(txt_Server.Text, cbo_Databasename.Text, txt_Uname.Text, txt_Password.Text, day.ToString("yyyy/MM/dd"), txt_texttenant.Text, txt_StoreKey.Text, "p_AYA_insert_hourly_First"); 
        BLL.InsertData.InsertDailySales(txt_Server.Text, cbo_Databasename.Text, txt_Uname.Text, txt_Password.Text, day.ToString("yyyy/MM/dd"), txt_texttenant.Text, txt_StoreKey.Text, "p_AYA_insert_hourly_Sec"); 

        BLL.PopulateData.LoadToDatagrid(txt_Server.Text, cbo_Databasename.Text, txt_Uname.Text, txt_Password.Text, "Select * from DAILY", dg_DailySales); 
        BLL.PopulateData.LoadToDatagrid(txt_Server.Text, cbo_Databasename.Text, txt_Uname.Text, txt_Password.Text, "Select * from HOURLY", dg_Hourly); 

        BLL.ExportData.ExportDaiySales(dg_DailySales, path + @"\" + txt_textContract.Text + day.ToString("MMdd")); 
        BLL.ExportData.ExportHourlySales(dg_Hourly, path + @"\" + txt_textContract.Text + day.ToString("MMdd")); 
       } 

       if (chk_DBF.Checked == true) 
       { 
        BLL.InsertData.InsertDailySales(txt_Server.Text, cbo_Databasename.Text, txt_Uname.Text, txt_Password.Text, day.ToString("yyyy/MM/dd"), txt_DBFTenantName.Text, txt_StoreKey.Text, "p_AYA_insertintodailydbf"); 
        BLL.PopulateData.LoadToDatagrid(txt_Server.Text, cbo_Databasename.Text, txt_Uname.Text, txt_Password.Text, "Select * from DailyDBF", dg_DBFDaily); 

        BLL.InsertData.InsertDailySales(txt_Server.Text, cbo_Databasename.Text, txt_Uname.Text, txt_Password.Text, day.ToString("yyyy/MM/dd"), txt_DBFTenantName.Text, txt_StoreKey.Text, "p_AYA_InsertHourly_DBF1"); 
        BLL.InsertData.InsertDailySales(txt_Server.Text, cbo_Databasename.Text, txt_Uname.Text, txt_Password.Text, day.ToString("yyyy/MM/dd"), txt_DBFTenantName.Text, txt_StoreKey.Text, "p_AYA_InsertHourly_DBF2"); 
        BLL.PopulateData.LoadToDatagrid(txt_Server.Text, cbo_Databasename.Text, txt_Uname.Text, txt_Password.Text, "Select * from HourlyDBF", dg_DBFHourly); 

        string Fields = "TRANDATE D, OLDGT N(15,2), NEWGT N(15,2), DLYSALE N(15,2), TOTDISC N(15,2), TOTREF N(15,2), TOTCAN N(15,2), VAT N(15,2), TENTNAME C(50), BEGINV I, " + 
            " ENDINV N(11), BEGOR N(11), ENDOR N(11), TRANCNT N(11), LOCALTX N(15,2), SERVCHARGE N(15,2), NOTAXSALE N(15,2), RAWGROSS N(15,2), DLYLOCTAX N(15,2), OTHERS N(11), TERMNUM C(50)"; 
        BLL.CreateDBF.CreateDBFile(path, txt_DBFTenantCode.Text + day.ToString("MMdd"), Fields); 

        string Hourly = "TRANDATE D, HOUR C(50), SALES N(15,2), TRANCNT N(11), TENTNAME C(50), TERMNUM C(50)"; 
        BLL.CreateDBF.CreateDBFile(path, txt_DBFTenantCode.Text + day.ToString("MMdd") + "H", Hourly); 

        BLL.InsertToDBF.InsertData(path, dg_DBFDaily, txt_DBFTenantCode.Text + day.ToString("MMdd")); 
        BLL.InsertToDBF.Hourly(path, dg_DBFHourly, txt_DBFTenantCode.Text + day.ToString("MMdd") + "H"); 
       } 
      } 
      MessageBox.Show("Success!"); 
      pic_Loading.Visible = false; 
     } 
     else 
     { 
      MessageBox.Show("Invalid Date"); 
     } 
    } 
+0

'pic_Loading.Visible = true'の後、フォームに表示する機会を与えなければなりません。 'Application.DoEvents()'(その行の直後)は片道ですが、もちろん良い方法があります。 – Sinatr

+1

コードを[BackGroundWorker]に入れてみてください(https://msdn.microsoft.com/es-es/library/system.componentmodel.backgroundworker(v = vs.110).aspx) – Pikoh

+0

長時間実行するコードを内部に配置します[BackgroundWorker](https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx)、今すぐbtn_Generate_Clickにはpic_Loading.Visible = trueとRunWorkerAsync()のみが含まれ、MessageBoxを移動してpic_Loadingを非表示にする必要がありますon BackgroundWorker Complete – Martheen

答えて

0

私はそれを最後にしました。私はBackgroudWorkerを使用しました。あなたの助けをいただきありがとうございます。

関連する問題