2010-06-10 56 views
0

我在SharePoint工作流程中發現了一個奇怪的線程問題,我想了解更多信息。我試圖通過啓動一個新線程來異步發送使用SPUtility.SendEmail的電子郵件。這成功地工作在摘要電子郵件的工作流程的末尾。我試圖做同樣的更換任務通知的電子郵件,但最終收到以下錯誤:在SharePoint工作流程內異步發送電子郵件

Microsoft.SharePoint.SPException: Attempted to make calls on more than one thread in single threaded mode.

我能想到的唯一的區別是,該任務是可複製的活動裏面,因此它可以創建幾個這些任務(儘管測試它只是創建一個)。當我嘗試產生一個新的線程時,在後臺執行的複製活動具體是什麼,可能會導致此錯誤?

[NOTE] 我使用線程發送電子郵件的原因是因爲SPUtility.SendEmail是一個阻塞呼叫,並且在SMTP服務器較慢的情況下,用戶可能會將其網頁恢復爲最多一個分鐘。而我首先發送電子郵件的原因是因爲標準任務電子郵件吸引了大量時間。

回答

4

SPUtility.SendEmail使用不是線程安全的SPWeb參數。 SPSite,SPWeb對象實際上是線程特定的,因此您不應將它們從一個線程傳遞到另一個線程。您應該將站點ID和Web URL傳遞到新線程,並在那裏重新創建SPWeb對象。

+0

你是對的,這是我的問題所在。在線程中創建新的SPWeb解決了問題。謝謝! – 2010-06-10 13:08:19

相關問題