Фоновый рабочий поток полное событие не запущено в C#
Привет,
В моем приложении я использовал поток backgroundworker для некоторого фонового процесса. Поток был успешно вызван, и событие Dowork выполнило всю его работу. Но после завершения события Dowork событие RunWorkerCompleted не увольняется. Любое предложение по этому поводу было бы здорово.
Здесь я приложил свой пример фрагмента кода.
Что я уже пробовал:
Форму mainform.в CS:
public partial class MainForm : Form { public Form1() { InitializeComponent(); InspectorWrapperThread wraperThread = new InspectorWrapperThread(); wraperThread.Start(); } }
InspectorWrapperThread.в CS
public class InspectorWrapperThread : IDisposable { BackgroundWorker worker1; public InspectorWrapperThread() { worker1 = new BackgroundWorker(); worker1.WorkerSupportsCancellation = true; worker1.DoWork += new DoWorkEventHandler(worker1_DoWork); worker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker1_RunWorkerCompleted); } void worker1_DoWork(object sender, DoWorkEventArgs e) { Called a function from here. function1(true); //Do some work here } void worker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { // This thread completion getting called correctly. } private void function1(bool exe) { // do some operation and call the function like below. WorkerThread2 worker = new WorkerThread2(); worker.function2(); } }
WorkerThread2.в CS
public class WorkerThread2 : IDisposable { private BackgroundWorker backgroundWorkerThread2Tab; public WorkerThread2() { backgroundWorkerThread2Tab = new BackgroundWorker(); backgroundWorkerThread2Tab.WorkerSupportsCancellation = true; backgroundWorkerThread2Tab.DoWork += new DoWorkEventHandler(backgroundWorkerThread2TabDoWork); backgroundWorkerThread2Tab.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorkerThread2TabRunWorkerCompleted); } public void function2() { // do some operation and call the function. HitAPIcalls(); } private void HitAPIcalls() { // do some operation and call if (!backgroundWorkerThread2Tab.IsBusy) backgroundWorkerThread2Tab.RunWorkerAsync(mail); } void backgroundWorkerThread2TabDoWork(object sender, DoWorkEventArgs e) { //This Dowork event getting called successfully and do all the operation without any issues. } void backgroundWorkerThread2TabRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { // This thread completion never getting called. } }
Если бы кто-нибудь обратился к этому вопросу здесь, это было бы здорово.
Заранее спасибо.
George Swan
Могу ли я предложить вам использовать асинхронный шаблон на основе задач? Он предназначен для устранения многих проблем, которые вы испытываете.