Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - DataGridView
Forum - C# / VB.NET - DataGridView

Avatar
Luciano (Normal User)
Newbie


Messaggi: 4
Iscritto: 24/10/2009

Segnala al moderatore
Postato alle 19:52
Sabato, 24/10/2009
Salve,

Ciao,
sto tentando di popolare una Datagridview in modo asincrono ma con questo codice la form si blocca ugualmente:


Codice sorgente - presumibilmente VB.NET

  1. Dim myDt As New DataTable
  2.  
  3.     Private Sub Me_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.         Dim column1 As New DataColumn("column1", GetType(String))
  5.         Dim column2 As New DataColumn("column2", GetType(Date))
  6.         Dim column3 As New DataColumn("column3", GetType(Date))
  7.         myDt.Columns.AddRange(New DataColumn() {column1, column2, column3})
  8.  
  9.         For i As Integer = 0 To 10000
  10.             Dim row As DataRow = myDt.NewRow
  11.             row(0) = "WW - " & i
  12.             row(1) = DateTime.Today
  13.             row(2) = DateTime.Today
  14.             myDt.Rows.Add(row)
  15.         Next
  16.         Me.DataGridView1.AutoGenerateColumns = False
  17.         Control.CheckForIllegalCrossThreadCalls = False
  18.     End Sub
  19.  
  20.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  21.         Dim ar As IAsyncResult = setDatasourceDeleg.BeginInvoke(myDt, Nothing, Nothing)
  22.     End Sub
  23.  
  24.     Delegate Sub SetDatasourceDelegate(ByVal dt As DataTable)
  25.  
  26.     Dim setDatasourceDeleg As New SetDatasourceDelegate(AddressOf SetDatasource)
  27.  
  28.     Private Sub SetDatasource(ByVal dt As DataTable)
  29.         Me.DataGridView1.DataSource = myDt
  30.     End Sub



Grazie anticipatamente.

Luciano

Ultima modifica effettuata da Il Totem il 25/10/2009 alle 14:11
PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 19:58
Sabato, 24/10/2009
a occhio sembra che hai dimenticato il databind()

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 14:14
Domenica, 25/10/2009
Ma si blocca perchè esegui diecimila step nel form_load o perchè deve aspettare la fine del binding?

PM Quote
Avatar
Luciano (Normal User)
Newbie


Messaggi: 4
Iscritto: 24/10/2009

Segnala al moderatore
Postato alle 7:45
Lunedì, 26/10/2009
Ciao.
Basta impostare Me.DataGridView1.AutoGenerateColumns = True per far funzionare l'esempio. Il problema è come impostare in background il la proprietà .Datasource della DataGridView. Il codice è perfettamente funzionante.

Grazie anticipatamente.

Luciano

PM Quote
Avatar
Luciano (Normal User)
Newbie


Messaggi: 4
Iscritto: 24/10/2009

Segnala al moderatore
Postato alle 17:28
Lunedì, 26/10/2009
Testo quotato

Postato originariamente da Il Totem:

Ma si blocca perchè esegui diecimila step nel form_load o perchè deve aspettare la fine del binding?



Perchè deve aspettare la fine del binding. Il clcilo è rapidissimo. Non riesco appunto a capire se posso impostare il binding in background. Dalle decine di prove che ho fatto sembrerebbe proprio di no.

Luciano

PM Quote
Avatar
Luciano (Normal User)
Newbie


Messaggi: 4
Iscritto: 24/10/2009

Segnala al moderatore
Postato alle 17:44
Lunedì, 26/10/2009
Testo quotato

Postato originariamente da Il Totem:

Ma si blocca perchè esegui diecimila step nel form_load o perchè deve aspettare la fine del binding?



Ciao Totem, scusami ma non ti ho risposto correttamente. Ho fatto talmente tante prove che sono fuso...
Ricapitolando: in tutte le prove che ho fatto (utilizzando backgroundworker e/o deleagati) la form si bloccava al momento del binding (quindi dopo il ciclo) e riprendeva a funzionare dopo qualche secondo.

Col codice che ti ho postato invece, la form non si blocca al momento del binding (quindi funziona benissimo) ma si blocca alla fine. Si blocca proprio tutta l'applicazione. A questo punto (spero) che il problema stia nel non corretto uso del delegate.

Grazie anticipatamente.

Luciano

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:21
Martedì, 27/10/2009
Forse perchè hai omesso EndInvoke? Non so bene se la sua funzione sia solo quella di restituisce il risultato dell'operazione asincrona al chiamate oppure se serva in qualche modo per terminare il thread (ad esempio perchè potrebbe essere stato messo in Join fino alla chiamata di EndInvoke).

PM Quote