【发布时间】:2015-08-11 05:49:54
【问题描述】:
我有一个需要在单公寓线程上下文中进行的调用,但我不能通过在我的代码中设置 [STAThread] 来保证这一点,因为我不控制入口点,我的代码将是通过反射调用。
我想出了这种调用调用并返回令牌的方法,但我希望有更好的方法:
private static string token;
private static Task<string> GetToken(string authority, string resource, string scope) // I don't control this signature, as it gets passed as a delegate
{
Thread t = new Thread(GetAuthToken);
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
return Task.Run(() =>
{
return token;
});
}
private static void GetAuthToken()
{
Credentials creds = AuthManagement.CreateCredentials(args); // this call must be STA
token = creds.Token;
}
我的限制:
- 第一个方法的签名必须是
Task<string> MyMethod(string, string, string) -
AuthManagement.CreateCredentials(args)必须在单线程公寓上下文中调用 - 当前线程上下文不能保证为 STA,因此应假定为 MTA。
我需要以保证它是 STA 的方式调用该方法,并返回一个结果。
感谢您的帮助!
【问题讨论】:
标签: c# .net multithreading