Проблема с наследованием - PullRequest
1 голос
/ 21 июля 2011

Я создал класс:

public class AbortableBackgroundWorker : BackgroundWorker
{



  private Thread workerThread;

    protected override void OnDoWork(DoWorkEventArgs e)
    {
        workerThread = Thread.CurrentThread;
        try
        {
            base.OnDoWork(e);
        }
        catch (ThreadAbortException)
        {
            e.Cancel = true; //We must set Cancel property to true!
            Thread.ResetAbort(); //Prevents ThreadAbortException propagation
        }
    }


    public void Abort()
    {
        if (workerThread != null)
        {
            workerThread.Abort();
            workerThread = null;
        }
    }
}

Вот как я это использую:

  backgroundWorker1 = new AbortableBackgroundWorker();
//...
backgroundWorker1.RunWorkerAsync();

if (backgroundWorker1.IsBusy == true)
{
    backgroundWorker1.Abort();//This method is unavailable :(
    backgroundWorker1.Dispose();
}

Еще один маленький вопрос .. этот код отменит фоновый работник?

Ответы [ 2 ]

6 голосов
/ 21 июля 2011

Это неправильный способ отменить задачу BackgroundWorker ... используйте метод CancelAsync и свойство CancellationPending. Вы почти никогда не должны прерывать поток, по крайней мере, когда вы можете выйти из этого шага чисто.

1 голос
/ 21 июля 2011

Метод недоступен, поскольку статический тип backgroundWorker1 равен BackgroundWorker.Вам нужно

AbortableBackgroundWorker backgroundWorker1 = new AbortableBackgroundWorker();

В противном случае вам придется понизить его (будь то с (cast) или as) до AbortableBackgroundWorker

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...