как отменить второстепенного рабочего после требуемого времени в c#

Спасибо Stu. Нижняя строка, кажется, что LINQ к SQL, вероятно, не имеет значительной производительности базы данных наверху с более новыми версиями, если Вы в состоянии использовать скомпилированный выбор, и более медленные функции обновления, вероятно, будут быстрее, если у Вас не будет ДЕЙСТВИТЕЛЬНО резкого эксперта, делающего большую часть кодирования.

5
задан Suriyan Suresh 27 August 2009 в 14:29
поделиться

2 ответа

Ознакомьтесь с этим руководством: http://www.albahari.com/threading/part3.aspx

Чтобы поток System.ComponentModel.BackgroundWorker поддерживал отмену, перед запуском потока необходимо установить для свойства WorkerSupportsCancellation значение True.

Затем вы можете вызвать метод .CancelAsync BackgroundWorker, чтобы отменить поток.

4
ответ дан 15 December 2019 в 01:07
поделиться

BackgroundWorker не имеет поддержки в любом случае. Вот начало кода для поддержки этих случаев.

class MyBackgroundWorker :BackgroundWorker {
    public MyBackgroundWorker() {
        WorkerReportsProgress = true;
        WorkerSupportsCancellation = true;
    }

    protected override void OnDoWork( DoWorkEventArgs e ) {
        var thread = Thread.CurrentThread;
        using( var cancelTimeout = new System.Threading.Timer( o => CancelAsync(), null, TimeSpan.FromMinutes( 1 ), TimeSpan.Zero ) )
        using( var abortTimeout = new System.Threading.Timer( o => thread.Abort(), null, TimeSpan.FromMinutes( 2 ), TimeSpan.Zero ) ) {
            for( int i = 0; i <= 100; i += 20 ) {
                ReportProgress( i );

                if( CancellationPending ) {
                    e.Cancel = true;
                    return;
                }

                Thread.Sleep( 1000 ); //do work
            }
            e.Result = "My Result";  //report result

            base.OnDoWork( e );
        }
    }
}
0
ответ дан 15 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: