c# - अन्य थ्रेड में डेटा लोड करने के दौरान लोड हो रहा एनीमेशन दिखाएं



.net multithreading (1)

जब फ़ॉर्म जमे हुए होते हैं, तो इसका मतलब है कि यूआई धागा बहुत व्यस्त है और इसलिए यदि आप एक लोडिंग एनीमेशन दिखाने की कोशिश करते हैं, तो भी यह चेतन नहीं होगा। आपको एसिंक्रोनस रूप से डेटा लोड करना चाहिए।

आपके पास एक async तरीका हो सकता है जो GetDataAsync विधि की तरह Task<DataTable> GetDataAsync है जिसे आप इस पोस्ट में देख सकते हैं। फिर इसे एक async ईवेंट हैंडलर में कॉल करें। ईवेंट हैंडलर में, पहले लोडिंग इमेज दिखाएं, फिर डेटा को एसिंक्रोनस रूप से लोड करें और आखिरी में लोडिंग इमेज को छिपाएं।

आप बस एक सामान्य PictureBox उपयोग कर सकते हैं जो लोड नियंत्रण के रूप में एक जिफ एनीमेशन दिखा रहा है। इसके अलावा, आप इस पोस्ट को एक ट्रसपैरेंट लोडिंग इमेज दिखाने के लिए देख सकते हैं।

public async Task<DataTable> GetDataAsync(string command, string connection)
{
    var dt = new DataTable();
    using (var da = new SqlDataAdapter(command, connection))
        await Task.Run(() => { da.Fill(dt); });
    return dt;
}

private async void LoadDataButton_Click(object sender, EventArgs e)
{
    loadingPictureBox.Show();
    loadingPictureBox.Update();
    try
    {
        var command = @"SELECT * FROM Category";
        var connection = @"Your Connection String";
        var data = await GetDataAsync(command, connection);
        dataGridView1.DataSource = data;
    }
    catch (Exception ex)
    {
        //Handle Exception
    }
    loadingPictureBox.hide();
}

मेरे पास डेटाबेस के साथ एक एप्लिकेशन चल रहा है। जब मैं डेटाग्रिडव्यू में एक टेबल लोड करता हूं, तो मेरा फॉर्म जमा हो जाता है। लोडिंग टेबल के दौरान चिकनी लोड एनीमेशन कैसे सुनिश्चित करें?

मैं एनीमेशन के लिए दो धागे चलाता हूं और डेटा को तालिकाओं में लोड करता हूं, लेकिन एनीमेशन अभी भी हमेशा काम नहीं करता है।

 private volatile bool threadRun;

 private void UpdateTab()
 {      
     // Create panel for animation
     Panel loadingPanel = new Panel();              
     // Label, where the text will change
     Label loadingLabel = new Label();
     loadingLabel.Text = "Loading";        

     loadingPanel.Controls.Add(loadingLabel);
     this.Controls.Add(loadingPanel);

     // thread loading animation
     threadRun = true;         

     Task.Factory.StartNew(() =>
     {
         int i = 0;
         string labelText;
         while (threadRun)
         {
             Thread.Sleep(500);
             switch (i)
             {
                 case 0:
                     labelText = "Loading.";
                     i = 1;
                     break;
                 case 1:
                     labelText = "Loading..";
                     i = 2;
                     break;
                 default:
                     labelText = "Loading...";
                     i = 0;
                     break;
            }
            loadingLabel.BeginInvoke(new Action(() => loadingLabel.Text = labelText));
         }
     });

     // thread update DataGridView   
     Thread update = new Thread(ThreadUpdateTab);
     update.Start();
 }

 private void ThreadUpdateTab()
 {
     // SQL Query...
     myDataGridView1.Invoke(new Action(() => myDataGridView1.DataSource = myDataSet1.Tables[0]));
     // ...
     myDataGridView10.Invoke(new Action(() => myDataGridView10.DataSource = myDataSet10.Tables[0]));

     threadRun = false;
 }




datagridview