【发布时间】:2016-01-28 16:37:47
【问题描述】:
我有一个 c# windows 窗体应用程序并使用一个不提供异步等待功能的库。
当我按下一个按钮时,我想做一些工作(网络请求)。 在做这项工作时,我不想冻结我的 gui。
我尝试了几种方法,例如:
public static Task<bool> LoginUser(string username, string password)
{
return Task.Factory.StartNew(() =>
{
try
{
session = new AuthenticatedSession<User>(new User(username), Cryptography.GetMd5(password));
return true;
}
catch (InvalidAuthenticationException)
{
return false;
}
});
}
当我调用 LoginUser("foo", "bar").Result 时,gui 会冻结,直到工作完成(我知道这不是异步的,因为我无法等待 new AuthenticatedSession<..。
所以我寻找类似的东西:
- 创建一个以动作为参数的线程
- 从线程返回值
- 结束话题
【问题讨论】:
-
库是否提供使用Asynchronous Programming Model(又名
BeginInvoke和EndInvoke)的方法?您使用的是 .Net 4.5 或更高版本吗?你看过continuations吗?我们真的需要更多地了解您的开发环境来帮助解决这个问题。
标签: c# multithreading asynchronous