J'ai créé un fil qui appelle un serveur web - lit certaines données - écrit des lignes à une DataTableDiscussion Goes en attente ou de l'état de veille lorsque vous essayez d'ajouter des lignes à Datatable
Mon fil actuel qui - attend jusqu'à ce que de nouvelles lignes arrivent - transmettre les données au système
le problème est mon thread d'écriture va en attente-Sleep-Join Mode (est venu à connaître de la fenêtre d'outil de fil) quand il tente d'écrire des lignes à Datatable
la structure du code est quelque chose comme ceci:
class DataRetriever
{
Thread GetReport;
private DataTable ServerData;
int rowCount = 0;
private int _lastReadedRowNo = -1;
public GetData()
{
thrGetReport = new Thread(new ThreadStart(fn_thrGetReport));
thrGetReport.Name = "CallServer";
thrGetReport.IsBackground = true;
thrGetReport.Start();
}
//Writer Thread Executes this
private void fn_thrGetReport()
{
for (int i = 0; i < cnt; i++)
{
DataRowCollection drcTemp = server.GetAnswer(parameter);
for (int j = 0; j < drcTemp.Count; j++)
{
ServerData.Rows.Add(drcTemp[j].ItemArray); // Here thread goes in Sleep/wait Mode
Interlocked.Increment(ref rowCount);
}
}
}
//This executes in Current Thread
public bool Read
{
get
{
if (no more data to ask condition)
{
return false;
}
else
{
//wait till new rows are not entered
while (rowCount <= (_lastReadRowNo + 1)) //Writer thread is in sleep/wait mode so this piece of code executes infinetly
;
while (Condition Here)
{
// Read Datarows here
//Copy the Read rows to some _toReturndt
i++;
}
_lastReadRowNo = i - 1;
return true;
}
}
}
public DataRowCollection GetNextData()
{
DataTable temp = _toReturnDt;
_toReturnDt.Rows.Clear();
return temp.Rows;
}
}
public class DataProcessor
{
public GetnProcess()
{
DataRetriever DataRetriever1 = new DataRetriever();
DataRetriever1.GetData();
while (this.DataRetriever1.Read)
{
DataRowCollection drc = this.DataRetriever1.GetNextData();
}
}
}
Est-ce DataTable binded à un certain contrôle de l'interface utilisateur ou ailleurs? – TcKs
oui c'est lié à datagridview, et c'est pourquoi son erreur me donne.Merci TcKs. – Hakim