可以使用外部程序集的static method
,如[ThreadStatic]
方法嗎?將[ThreadStatic]屬性應用於外部程序集中的方法
這是我的情況。 的assembly class
(我沒有訪問到其源極)具有這種結構
public class RegistrationManager()
{
private RegistrationManager() {}
public static void RegisterConfiguration(int ID) {}
public static object DoWork() {}
public static void UnregisterConfiguration(int ID) {}
}
一旦註冊,我無法與不同的ID,而不註銷調用DoWork()
先前註冊的一個。其實我想用多線程同時調用不同ID的DoWork()
方法。
如果RegisterConfiguration(int ID)
方法是[ThreadStatic]
,我可以在不同的線程中調用它,而不會出現通話問題,對吧?那麼,我可以將[ThreadStatic]
屬性應用於此方法,還是有任何其他方法可以同時調用兩個static
方法,而無需等待其他線程取消註冊?
如果我檢查它,如下所示,它應該工作。
for(int i=0; i < 10; i++)
{
new Thread(new ThreadStart(() => Checker(i))).Start();
}
public string Checker(int i)
{
public static void RegisterConfiguration(i); // Now i cannot register second time
public static object DoWork(i);
Thread.Sleep(5000); // DoWork() may take a little while to complete before unregistered
public static void UnregisterConfiguration(i);
}
謝謝Erik,我會嘗試使用不同的應用程序域。我發現['這個問題'](http://stackoverflow.com/questions/4298913/static-fields-in-appdomain)與此有關,但我有困惑在不同的AppDomains中調用靜態方法,讓我試試。 –
對您提及的問題的接受答案應解決問題。您首先需要創建一個包裝器對象,您可以創建一個包裝器對象,並讓該包裝器對象與靜態方法進行交互。讓我知道這是如何解決的。 –
我試圖使用另一個包裝庫並調用該函數,它調用該函數,但因爲它返回的是另一個對象,該對象是外部庫中不可序列化的類的實例。所以我得到了一個序列化異常。無論如何,當我們調用'appDomain1..CreateInstanceAndUnwrap(...)。FactoryMethod()'時,創建一個不可序列化的對象並從包裝器庫中返回它。 –