Is DataRow thread safe? How to update a single datarow in a datatable using multiple threads? - .net
Posted
by NLV
on Stack Overflow
See other posts from Stack Overflow
or by NLV
Published on 2010-04-13T11:34:31Z
Indexed on
2010/04/13
11:43 UTC
Read the original article
Hit count: 498
Hello all
I want to update a single datarow in a datatable using multiple threads. Is this actually possible?
I've written the following code implementing a simple multi-threading to update a single datarow. I get different results each time. Why is it so?
public partial class Form1 : Form
{
private static DataTable dtMain;
private static string threadMsg = string.Empty;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Thread[] thArr = new Thread[5];
dtMain = new DataTable();
dtMain.Columns.Add("SNo");
DataRow dRow;
dRow = dtMain.NewRow();
dRow["SNo"] = 5;
dtMain.Rows.Add(dRow);
dtMain.AcceptChanges();
ThreadStart ts = new ThreadStart(delegate { dtUpdate(); });
thArr[0] = new Thread(ts);
thArr[1] = new Thread(ts);
thArr[2] = new Thread(ts);
thArr[3] = new Thread(ts);
thArr[4] = new Thread(ts);
thArr[0].Start();
thArr[1].Start();
thArr[2].Start();
thArr[3].Start();
thArr[4].Start();
while (!WaitTillAllThreadsStopped(thArr))
{
Thread.Sleep(500);
}
foreach (Thread thread in thArr)
{
if (thread != null && thread.IsAlive)
{
thread.Abort();
}
}
dgvMain.DataSource = dtMain;
}
private void dtUpdate()
{
for (int i = 0; i < 1000; i++)
{
try
{
dtMain.Rows[0][0] = Convert.ToInt32(dtMain.Rows[0][0]) + 1;
dtMain.AcceptChanges();
}
catch
{
continue;
}
}
}
private bool WaitTillAllThreadsStopped(Thread[] threads)
{
foreach (Thread thread in threads)
{
if (thread != null && thread.ThreadState == ThreadState.Running)
{
return false;
}
}
return true;
}
}
Any thoughts on this?
Thank you
NLV
© Stack Overflow or respective owner