2009-09-25 1 views
2

가끔씩 메시지없이 종료되는 다중 스레드 .NET 응용 프로그램이 있습니다. 로그를 확인할 때 "KERNEL32.dll의 응용 프로그램 오류"항목이 있습니다. 무엇이 이것을 일으킬 수 있습니까? 여기에 몇 가지 기본적인 코드는 다음과 같습니다다중 스레드 .NET 응용 프로그램은 64 비트 쿼드 코어 Windows Server에서 실행되는 KERNEL32.dll에서 응용 프로그램 오류를 발생시킵니다.

foreach (int id in ids) 
{ 
    ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessData), id); 
} 

ProcessData 방법은 다음과 같습니다

private void ProcessData(object _id) 
//Load some data from a database with id = _id 
//Process that data and push it to another server using HTTP 
//Increment a counter 

Interlocked.Increment(ref counter); 

//Update progress bar 
try 
{ 
    // Invoke the delegate on the form. 
    this.Invoke(new BarDelegate(UpdateBar), counter); 
} 
catch {} 
} 

경우에 따라서 처리 할 식별자의 수백만이있을 수 있습니다. 그러나 10,000 개의 ID로 테스트하면 대개 응용 프로그램 오류가 발생합니다. 나는 이것에 관해 정확하게 가고 있냐?

도움 주셔서 감사합니다.

+0

코드가 너무 많은 단서를 제공하지는 않지만 아래의 leppie의 질문 외에도 ids 컬렉션은 다른 곳에서 만져지나요? – SpaceghostAli

답변

1

QueueUserWorkItem은 항상 true를 반환합니까?

또한 빈 캐치에서 예외가 발생합니까?

+0

이 문제를 해결했습니다. 예외에 대한 귀하의 의견은 저에게이 문제를 일으키는 처리되지 않은 예외였습니다. 교훈 - 멀티 스레드 응용 프로그램에서 항상 예외를 처리하고 기록하십시오! 귀하의 의견을 보내 주셔서 감사합니다. – jensendarren

+0

쿨하고 고마워. :) – leppie

관련 문제