I am developing a small software for retrieving data from device and send it to server.As it is a desktop software so i have to add current available message to GUI.It works fine until i have joined those Thread. When i try to stop this thread by setting flag(currently IsRunning is my flag) value to false and then try to add a message to Gui it freeze whole application.probably deadlock issue but i am not entirely sure about that. Please help
stop point of thread
try
{
IsRunning = false;
_bgThread.Join(); //this makes a deadlock probably
//_bgThread.Join(7000); //this works fine
}
catch (ThreadStartException ese)
{
throw ese;
}
//Thread method
private void DeviceSync()
{
while (IsRunning)
{
// ...statement
}
//now what actually happen in my case is
//when i try to stop the thread by setting the value of "IsRunning" false
//it comes to this line and pass a message to UI by throwing OnThrowingMessage event
var info = "Service Stopped at: " + DateTime.Now.ToString(BusinessRules.DateTimeFormat);
OnThrowingMessage(info, MessageType.Important);// this event fails to bind message to UI thread causes freeze UI
}
//delegate method
private void OnGuiMessaging(string message, MessageType messageType)
{
try
{
//for avoiding Invalid Cross-thread Operations as sometimes it is calling from background thread
if (this.currentStatedataGridView.InvokeRequired)
{
Console.WriteLine("Here it is for the first time ");
//Application freeze here
this.currentStatedataGridView.Invoke(new SomeDelgate(OnGuiMessaging), new object[] { message, messageType });
}
else
{
//add row
string[] rowData = new string[] { DateTime.Now.ToString(BusinessRules.DateTimeFormat), message };
currentStatedataGridView.Rows.Insert(0, rowData);
currentStatedataGridView.Rows[0].DefaultCellStyle.BackColor = rowColor;
}
}
catch (Exception ex)
{
Log.Error(ex);
}
}