I am simply trying to abort thread by clicking a button to stop the process if user wanted instead of exiting the application.
This is original code:
private void Abort_Click(object sender, EventArgs e)
{
// thread1.Abort();
}
/// Runs method 'Copy' in a new thread with passed arguments - on this way we separate it from UI thread otherwise it would freeze
private void backgroundCopy_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e )
{
List<object> genericlist = e.Argument as List<object>;
Thread thread1 = new Thread(() => Copy(genericlist[0].ToString(), genericlist[1].ToString()));
thread1.Start();
thread1.Join(); //Waiting for thread to finish
}
What I have tried:
I tried Abort() thread from button click event by moving thread field out of method, that way you can get access from your button click event, but it throws many errors:
object sender;
System.ComponentModel.DoWorkEventArgs e;
List<object> genericlist = e.Argument as List<object>;
Thread thread1 = new Thread(() => Copy(genericlist[0].ToString(), genericlist[1].ToString()));
private void Abort_Click(object sender, EventArgs e)
{
thread1.Abort();
}
/// Runs method 'Copy' in a new thread with passed arguments - on this way we separate it from UI
thread otherwise it would freeze
private void backgroundCopy_DoWork( )
{
thread1.Start();
thread1.Join(); //Waiting for thread to finish
}
That's what I did but I get error:
under e and genericlist : a field initialize can not reference a non static field, method or property.
In case you have to use threads, try this. Otherwise, try cancelAsync like in this link: https://www.wpf-tutorial.com/misc/cancelling-the-backgroundworker/
we must be sure that all threads are terminated when the form is closed. so we add these controls.