stop thread operations

  • Thread starter Thread starter magic man via .NET 247
  • Start date Start date
M

magic man via .NET 247

hi everyone i have a c# application that uses multithreading toconnect to sql server and execute a stored procedure on theserver. i am using a dataset,sqlcommand,dataadapter and adatagrid to carry out the process on a background thread andeverything goes well but the problem arrises when i created astop button that attempts to cancel the operation of datasetfilling(somtimes the query takes much time and i need to cancelthe operation)
so that is what i did : 1)created global boolean variableisconnected
put the following code inside stopbutton_click
try
{ dataGrid1.DataSource =null; isconnected=false; mythread.Abort();
try
{
if (sqcmd != null)
{ sqcmd.Cancel (); }

if (sqlconn != null)
{ sqlconn.Close(); }
}
catch(Exception)
{return ;}
}

catch (ThreadAbortException)
{
return;
}
myform.button1 .Enabled =true;
myform.button2 .Enabled =true;

and that is the part of code that fills tha dataset (which isrunning in the background thread)

bool IsConnecting = true;
while(IsConnecting == true)
{
try
{
sqlconn.Open ();
myform.sqcmd = new SqlCommand ("sp_search_master",sqlconn);}
sda =new SqlDataAdapter (myform.sqcmd);
dssearch = new DataSet ();
myform.sqcmd.CommandType = CommandType.StoredProcedure ;
myform.sqcmd.Parameters.Add(new SqlParameter("@First_Part",SqlDbType.VarChar)).Value = myform.txtname.Text;
myform.sqcmd.CommandTimeout=0;
sda.Fill (dssearch, "igmaster"); myform.dtSource =dssearch.Tables["igmaster"];
IsConnecting = false; myform.statusBarPanel1 .Text =" searchended " ;
myform.sqcmd.Dispose (); sqlconn.Close ();
}
catch
{
MessageBox.Show("connection eror", "Application Error",MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
the problm is that when i press stop button either theapplication hangs or VS gives me runtime error :unknow error
could u plz tel me a good practise for cancelling the job ofdataset filling smoothly without any problems
i have read somthing like that herehttp://www.codeproject.com/csharp/workerthread.asp#xx427611xxbut in that example there is a loop that checks the state of anevent how can also i override the exception peacefully ifthe button is pressed thans for ur time i am waiting ur help
 
It is hard to tell by the code fragement but here you go.

Try and remove mythread.Abort from the click event handler and see if
you can get the sqcmd.Cancel() to stop the stored procedure. Run SQL
Profiler before you start your debug session and see if you are
successful. Remeber that when calling sqlcmd.Cancel() you are not
guarenteed that the current command will actually cancel and you will
receive no exception if the call fails.

If the sqcmd.Cancel() succeeds then the sda.Fill(dsSearch, "igmaster")
call in the thread prodedure should return and go into the catch
with an exception and finally return.


If this doesn't help you then try to put all database access code
including your connection and command objects in the scope of the
thread procedure only. Then try andt call just the mythread.Abort in
the click event and see if this works. The logic here is that maybe
with your variables being referenced in two different threads UI and
the background thread you are experiencing some problems with
referencing.


Also for future reference you need to access your UI stuff differently
using the BeginInvoke sytle that was described in the article you
refered to.

For reference look at this series of articles and see if they help.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnforms/html/winforms06112002.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnforms/html/winforms08162002.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnforms/html/winforms08162002.asp


hi everyone i have a c# application that uses multithreading to connect to sql server and execute a stored procedure on the server. i am using a dataset,sqlcommand,dataadapter and a datagrid to carry out the process on a background thread and everything goes well but the problem arrises when i created a stop button that attempts to cancel the operation of dataset filling(somtimes the query takes much time and i need to cancel the operation)
so that is what i did : 1)created global boolean variable isconnected
put the following code inside stopbutton_click
try
{ dataGrid1.DataSource =null; isconnected=false; mythread.Abort();
try
{
if (sqcmd != null)
{ sqcmd.Cancel (); }

if (sqlconn != null)
{ sqlconn.Close(); }
}
catch(Exception)
{return ;}
}

catch (ThreadAbortException)
{
return;
}
myform.button1 .Enabled =true;
myform.button2 .Enabled =true;

and that is the part of code that fills tha dataset (which is running in the background thread)

bool IsConnecting = true;
while(IsConnecting == true)
{
try
{
sqlconn.Open ();
myform.sqcmd = new SqlCommand ("sp_search_master",sqlconn);}
sda =new SqlDataAdapter (myform.sqcmd);
dssearch = new DataSet ();
myform.sqcmd.CommandType = CommandType.StoredProcedure ;
myform.sqcmd.Parameters.Add(new SqlParameter("@First_Part", SqlDbType.VarChar)).Value = myform.txtname.Text;
myform.sqcmd.CommandTimeout=0;
sda.Fill (dssearch, "igmaster"); myform.dtSource = dssearch.Tables["igmaster"];
IsConnecting = false; myform.statusBarPanel1 .Text =" search ended " ;
myform.sqcmd.Dispose (); sqlconn.Close ();
}
catch
{
MessageBox.Show("connection eror", "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
the problm is that when i press stop button either the application hangs or VS gives me runtime error :unknow error
could u plz tel me a good practise for cancelling the job of dataset filling smoothly without any problems
i have read somthing like that here http://www.codeproject.com/csharp/workerthread.asp#xx427611xx but in that example there is a loop that checks the state of an event how can also i override the exception peacefully if the button is pressed thans for ur time i am waiting ur help
 
Back
Top