0
我有一個沒有源代碼的第三方DLL接受文件頁面數組和返回書籍對象。該dll有一個函數GenerateBook(Page []頁面),在BackgroungWorker下執行。如何在不使用DoWorkEventArgs的情況下強制中止由BackgroundWorker創建的線程取消屬性?
如果用戶按下中止按鈕,進程應該停止生成書本。使用cancelAsync(),我可以向BackgroundWorker線程進程發送取消請求。但是GenerateBook(Page []頁面)是第三方功能,所以我不能在其中使用e.cancel。
現在在這種情況下,如何立即中止後臺工作進程?請給我建議。現在我正在使用下面的代碼。但那是行不通的。
public class AbortableBackgroundWorker : BackgroundWorker
{
public delegate void ErrorEventHandler(string message, ReportRunStatus status);
public event ErrorEventHandler foundError;
public Thread workerThread { get; set; }
private bool isFromAbort;
protected override void OnDoWork(DoWorkEventArgs e)
{
workerThread = Thread.CurrentThread;
try
{
base.OnDoWork(e);
}
catch (Exception ex)
{
if (!isFromAbort)
{
if (foundError != null)
foundError(ex.Message.ToString(), ReportRunStatus.Error);
}
e.Cancel = true;
this.Dispose();
}
}
public void Abort()
{
if (workerThread != null)
{
isFromAbort = true;
workerThread.Abort();
workerThread = null;
}
}
}
不要使用這種過時的類。使用TPL和'取消令牌'來完成這些任務。另外,中止這個線程總是**一個壞主意。 – VMAtm