하는 ASP.NET 송장 응용 프로그램이있는 저장 버튼을, 그 양식 데이터, 사용자 아이디 등ManualResetEvent.WaitOne는() AccessViolation가 발생
를 사용하여 디스크에 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
입니다.
세 가지가이 이야기에서 이해하는 것이 중요하다
- 이 내 코드
- 없는 내가 스레딩에 대한 약간의 지식을 가지고있다. 그것은 내가 직장에서 거의 접촉하지 않는 것입니다.
- 내 개발 기계에서 몇 주 전까지 정상적으로 작동했습니다. 일부 외적 요소가 원인 일 가능성이 있지만 그 이유 또는 이유를 찾을 수 없습니다. 그 사이에 코드 업데이트가 없습니다.
이 질문에 추가 정보가 필요합니다. 스레딩에 대한 나의 이해가 심각하게 제한되어 있으므로 귀하의 요청에 따라 질문을 업데이트 할 것입니다.
실제로 문제는 이전에 본 적이없는 비린내입니다. 하지만 어쨌든 동기식으로 결과를 기다리고있을 때 비동기 요청을하는 이유는 무엇입니까? – PMF
@PMF 내가 말했듯이 이것은 갑자기 예외를 throw하는 레거시 코드입니다. 너의 추측은 나의 것만 큼 좋다. 이것을 쓴 사람은 더 이상 여기서 일하지 않습니다. –
관찰하고있는 증상이이 문제와 직접 관련이 없다고 생각합니다. 우연히이 시점에서 사고로 인해 관리되지 않는 코드에서 메모리 손상이 발생했을 수 있습니다. 가능한 경우 DrawPdf 호출을 주석 처리 했습니까? – PMF