1
我正在爲EXE製作一個DLL「插件」。 EXE用Object作爲參數調用DLL中的函數,並從那裏開始。通過COM interop在C#中訪問受保護的內存
這一切都正常工作,直到我把它分成一個新的線程。發生此錯誤
嘗試讀取或寫入受保護的 內存。這通常表明 其他內存已損壞。
在新線程執行所述對象對這個代碼時
:
protected object GetPropertyValue(object obj, string PropertyName)
{
return obj.GetType().InvokeMember(PropertyName, BindingFlags.GetProperty, null, obj, new object[] { });
}
上面試圖COM對象上訪問屬性。將該功能更改爲「公開」不會影響它。代碼工作得很好,但如果我只使用一個線程。
發生了什麼很清楚:新線程無法訪問EXE中的變量。我怎樣才能解決這個問題?不使用線程不是一個可行的選擇。
欣賞任何幫助
我無法控制COM對象 – Lynxy 2009-11-26 20:43:48
但您確實可以控制調用它的線程。如果它是一個STA com對象,則必須從擁有它的線程(它創建的線程)訪問它。 – 2009-11-27 15:35:29
或者,嘗試添加設置BG線程以在創建時使用STA。如果你這樣做,我相信CLR會爲你處理線程調度(使用消息循環)。 只需調用thread.SetAppartmemtState – 2009-11-27 15:45:05