Вы не хотите переноситься 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
поток, если это больше к Вашему вкусу - лучший выбор, зависит от того, в каком количестве управления Вы нуждаетесь по потоку.
Поймайте ThreadAbortExcpetion.
http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx
Я думаю, что можно использовать [Auto|Manual]ResetEvent, который Вы установите, когда поток завершится
что относительно того, чтобы назвать стандартный метод в асинхронном режиме? например,
//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
Существует много способов, которыми можно сделать это, но самый простой должен сделать как McKenzieG1, сказал, и просто перенесите вызов к библиотеке PDF. После вызова библиотеки PDF в потоке, можно использовать Событие или ManualResetEvent в зависимости от того, как необходимо ожидать потока для окончания.
Не забывайте упорядочивать вызовы события к потоку UI с BeginInvoke при использовании подхода События.
Проверьте библиотеку Powerthreading по http://wintellect.com.
Вы только перенесли бы свое использование PDF с наконец (если это - отдельный метод), или в IDisposable?