2009-09-22 8 views
0

Comment utiliser Threading pour modifier une cellule dans Gridview? J'ai une requête de base de données et il utilise beaucoup de temps pour sa requête. Donc c'est très lent et j'aimerais utiliser Threading pour charger les données plus rapidement. De plus, lorsque le thread a terminé, son travail peut changer les données en mode Grid?Comment utiliser Threading dans Changer une cellule dans Gridview?

+0

Le problème consiste à implémenter le thread ou à éviter les exceptions inter-threads lors du remplissage de la grille. – DaveShaw

+0

S'il vous plaît être plus précis. Qu'est-ce que tu ne comprends pas? –

Répondre

0
using System.Threading; 
using System.Threading.Tasks; 

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     dataGridView1.DataSource = new List<Test>() { new Test { Name = "Original Value" } }; 
    } 

    // Start the a new Task to avoid blocking the UI Thread 
    private void button1_Click(object sender, EventArgs e) 
    { 
     Task.Factory.StartNew(this.UpdateGridView); 
    } 
    // Blocks the UI 
    private void button2_Click(object sender, EventArgs e) 
    { 
     UpdateGridView(); 
    } 

    private void UpdateGridView() 
    { 
     //Simulate long running operation 
     Thread.Sleep(3000); 
     Action del =() => 
      { 
       dataGridView1.Rows[0].Cells[0].Value = "Updated value"; 
      }; 
     // If the caller is on a different thread than the one the control was created on 
     // http://msdn.microsoft.com/en-us/library/system.windows.forms.control.invokerequired%28v=vs.110%29.aspx 
     if (dataGridView1.InvokeRequired) 
     { 
      dataGridView1.Invoke(del); 
     } 
     else 
     { 
      del(); 
     } 
    } 
} 
Questions connexes