Сохраните переменную, к которой может обращаться как фоновый работник, так и код пользовательского интерфейса. Проще говоря, давайте сохраним это как общедоступную статическую переменную.
public class YourClass
{
public static bool IsBackgroundProcessActive = true;
}
Теперь, когда вы работаете с окном сообщений, измените эту переменную.
if(MessageBox.Show("convert is okey")
{
yourClass.IsBackgroundProcessActive = false;
}
Теперь вам нужно сделать фоновый рабочий. послушайте эту переменную. Для большинства распространенных случаев этот фоновый рабочий будет циклом с простым процессом. Таким образом, вы можете установить условие цикла для проверки этой переменной:
private void YourBackgroundWorkerFunction()
{
while(yourClass.IsBackgroundProcessActive)
{
// Your simple iterative task
}
}
Для сложных случаев, когда фоновый работник не является простым циклом, вы можете использовать исключение для остановки потока. Для этого случая напишите простую функцию как
private void MarkAsSafeToStop()
{
if(!yourClass.IsBackgroundProcessActive)
{
throw new OperationCancelledException();
}
}
Затем используйте эту функцию в нескольких местах вашей фоновой рабочей функции. Затем фоновый работник будет останавливаться с исключением, когда вы достигнете этой функции после щелчка в окне сообщения.
т.е.
private void YourBackgroundWorkerFunction()
{
// Some code
MarkAsSafeToStop();
// Some other code
MarkAsSafeToStop();
// and so on.
}