2009-09-25 35 views
2

我有一個多線程的.NET應用程序偶爾會在沒有任何消息的情況下終止。當我檢查日誌時,有一個「KERNEL32.dll中的應用程序錯誤」條目。什麼可能導致這個?下面是一些基本代碼:多線程.NET應用程序導致運行在64位四核心Windows服務器上的KERNEL32.dll中出現應用程序錯誤

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

的過程數據的方法是這樣的:

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 {} 
} 

可以有幾百萬的ID在某些情況下,要處理的。但僅用10,000個ID進行測試通常會導致所描述的應用程序錯誤。我正確地處理這個問題嗎?

謝謝你的幫助!

+0

你的代碼並沒有給出太多的線索,除了下面的leppie問題之外,其他地方的ids集合還會被觸動嗎? – SpaceghostAli 2009-09-25 13:56:18

回答

1

QueueUserWorkItem總是返回true?

另外,你是否在這個空的捕獲異常?

+0

我已經解決了這個問題。您對異常的評論讓我思考並確信這是一個未處理的異常,正在拋出導致此問題。獲得的教訓 - 總是在多線程應用程序中處理和記錄異常!謝謝您的意見。 – jensendarren 2009-09-26 09:04:27

+0

很酷,謝謝:) – leppie 2009-09-26 09:34:16

相關問題