2013-10-30 1 views
0

하는 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입니다.

세 가지가이 이야기에서 이해하는 것이 중요하다

  • 이 내 코드
  • 없는 내가 스레딩에 대한 약간의 지식을 가지고있다. 그것은 내가 직장에서 거의 접촉하지 않는 것입니다.
  • 내 개발 기계에서 몇 주 전까지 정상적으로 작동했습니다. 일부 외적 요소가 원인 일 가능성이 있지만 그 이유 또는 이유를 찾을 수 없습니다. 그 사이에 코드 업데이트가 없습니다.

이 질문에 추가 정보가 필요합니다. 스레딩에 대한 나의 이해가 심각하게 제한되어 있으므로 귀하의 요청에 따라 질문을 업데이트 할 것입니다.

+0

실제로 문제는 이전에 본 적이없는 비린내입니다. 하지만 어쨌든 동기식으로 결과를 기다리고있을 때 비동기 요청을하는 이유는 무엇입니까? – PMF

+0

@PMF 내가 말했듯이 이것은 갑자기 예외를 throw하는 레거시 코드입니다. 너의 추측은 나의 것만 큼 좋다. 이것을 쓴 사람은 더 이상 여기서 일하지 않습니다. –

+0

관찰하고있는 증상이이 문제와 직접 관련이 없다고 생각합니다. 우연히이 시점에서 사고로 인해 관리되지 않는 코드에서 메모리 손상이 발생했을 수 있습니다. 가능한 경우 DrawPdf 호출을 주석 처리 했습니까? – PMF

답변

0

분명히 (그리고 나를 쏘지 마라. 나는 위의 코드 블록을 try-catch에 넣음으로써 문제를 해결할 수있다.
슬프게도, 이것은 AccessViolation의 원인에 대한 암시를 드러내지 않습니다.

+0

예, 이것은 끔찍합니다. 'try-catch'를 사용하여 예외를 억제하면 어떤 송장이 쓰여지지 않았는지 알 수 없다는 것을 의미 할 수도 있습니다. – groverboy

+0

일반적인 환경 (개발 환경이 아님)에서 코드를 사용하기 시작했을 때'AccessViolation'이 나타 났습니까? 여러 스레드에서 공유하는 리소스가 있지만 동시 액세스로부터 보호되지는 않습니다. – groverboy

+0

@groverboy 아니요.이 문제가 발생하는 개발자는 –