I am working on application that uses BackgroundWorker Thread
. I have a button click event on which I'm doing following things
btnLocate_Click(Object sender, EventArgs e)
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += bw_DoWork;
bw.RunWorkerCompleted += bw_RunWorkerCompleted;
bw.RunWorkerAsync(lstNumbers.CheckedItems[0].ToString());
}
In the Background Worker do work event I'm adding some values in globally defined ObservableCollection
like this
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
try
{
lock (locker)
{
_RecData.Add(new RecNumberData
{
// Some Values
});
}
}
In BackgroundWorker complete event I'm setting this collection as data source for grid and start a timer that create a new BackgroundWorker
and do the same job again.
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
grid.DataSource = RecData;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += bw_DoWork;
bw.RunWorkerCompleted += bw_RunWorkerCompleted;
bw.RunWorkerAsync(lstNumbers.CheckedItems[0].ToString());
}
Now the code runs fine when first time BackgroundWorker
runs. But when second time it runs after Timer ticking event, Exception raised at line Cross Thread Opeartion Detected
.
_RecData.Add(new RecNumberData
{
// Some Values
});
What could be the cause?