Существует ли способ определить, когда поток.NET завершается?

9
задан Alex Miller 30 September 2008 в 14:50
поделиться

7 ответов

Вы не хотите переноситься System.Thread по сути - просто составляют его с Вашим PDFWidget класс, который делает работу:

class PDFWidget
{
    private Thread pdfWorker;
    public void DoPDFStuff()
    {
        pdfWorker = new Thread(new ThreadStart(ProcessPDF));
        pdfWorker.Start();
    }

    private void ProcessPDF()
    {
        OtherGuysPDFThingie pdfLibrary = new OtherGuysPDFThingie();
        // Use the library to do whatever...
        pdfLibrary.Cleanup();
    }
}

Вы могли также использовать a ThreadPool поток, если это больше к Вашему вкусу - лучший выбор, зависит от того, в каком количестве управления Вы нуждаетесь по потоку.

3
ответ дан 4 December 2019 в 23:08
поделиться
1
ответ дан 4 December 2019 в 23:08
поделиться

Я думаю, что можно использовать [Auto|Manual]ResetEvent, который Вы установите, когда поток завершится

1
ответ дан 4 December 2019 в 23:08
поделиться

что относительно того, чтобы назвать стандартный метод в асинхронном режиме? например,

//declare a delegate with same firmature of your method
public delegete string LongMethodDelegate ();

//register a callback func
AsyncCallback callbackFunc = new AsyncCallback (this.callTermined); 

//create delegate for async operations
LongMethodDelegate th = new LongMethodDelegate (yourObject.metyodWichMakeWork);

//invoke method asnync.
// pre last parameter is  callback delegate.
//the last parameter is an object wich you re-find in your callback function. to recovery return value, we assign delegate itSelf, see "callTermined" method
longMethod.beginInvoke(callbackFunc,longMethod);   

//follow function is called at the end of thr method
public static void callTermined(IAsyincResult result) {
LongMethodDelegate method  = (LongMethodDelegate ) result.AsyncState;  
string output = method.endInvoke(result);
Console.WriteLine(output);
}

Посмотрите здесь форму больше информации: http://msdn.microsoft.com/en-us/library/2e08f6yc.aspx

1
ответ дан 4 December 2019 в 23:08
поделиться

Существует много способов, которыми можно сделать это, но самый простой должен сделать как McKenzieG1, сказал, и просто перенесите вызов к библиотеке PDF. После вызова библиотеки PDF в потоке, можно использовать Событие или ManualResetEvent в зависимости от того, как необходимо ожидать потока для окончания.

Не забывайте упорядочивать вызовы события к потоку UI с BeginInvoke при использовании подхода События.

1
ответ дан 4 December 2019 в 23:08
поделиться

Проверьте библиотеку Powerthreading по http://wintellect.com.

0
ответ дан 4 December 2019 в 23:08
поделиться

Вы только перенесли бы свое использование PDF с наконец (если это - отдельный метод), или в IDisposable?

0
ответ дан 4 December 2019 в 23:08
поделиться
Другие вопросы по тегам:

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