ManualResetEvent.WaitOne()导致AccessViolation

时间:2013-10-30 11:11:47

标签: c# asp.net access-violation manualresetevent

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

在这个故事中要理解三件事:

  • 这不是我的代码
  • 我对线程知之甚少。这只是我在工作中很少接触到的东西。
  • 几周前,我的开发机器上运行良好。有可能是一些外部因素造成了这种情况,但我找不到什么或为什么。当时和现在之间没有代码更新。

很有可能,这个问题需要额外的信息。由于我对线程的理解非常有限,我会根据您的要求更新我的问题。

1 个答案:

答案 0 :(得分:0)

显然(并且不要在这里拍我,我意识到这是可怕的,可怕的编码,因为除了不执行该过程之外它什么都不解决)我可以通过将上述代码块包含在{{1}中来解决问题}}。
遗憾的是,这并没有揭示可能导致try-catch的原因。