ASP.NET发票应用程序有一个保存按钮,可以使用表单数据,userID等触发(除其他外)在磁盘上生成pdf文件。
摘自GeneratePDF
方法:
ManualResetEvent generateInvoiceEvent;
generateInvoiceEvent = new ManualResetEvent(false);
CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
ThreadPool.QueueUserWorkItem(delegate
{
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture;
InvoicePdfGenerator generator = new InvoicePdfGenerator();
generator.SetTranslationFile(GetFileSharedFilePath());
generator.DrawPdf(invoiceXml, pdfFilePath, invoiceLanguage.ValueCode,
currentCulture, invoiceLayoutXml, imageRootFolder);
generateInvoiceEvent.Set(); //Signal completion of invoice generation
}
);
generateInvoiceEvent.WaitOne();
出于某种原因,WaitOne()
方法大部分时间都会抛出AccessViolation
,但并不总是,但我似乎无法进一步调试。除此之外是mscorlib
。
在这个故事中要理解三件事:
很有可能,这个问题需要额外的信息。由于我对线程的理解非常有限,我会根据您的要求更新我的问题。
答案 0 :(得分:0)
显然(并且不要在这里拍我,我意识到这是可怕的,可怕的编码,因为除了不执行该过程之外它什么都不解决)我可以通过将上述代码块包含在{{1}中来解决问题}}。
遗憾的是,这并没有揭示可能导致try-catch
的原因。