可以使用外部程序集的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()'时,创建一个不可序列化的对象并从包装器库中返回它。 –