您好我在Caliburn Micro中使用WPF,在视图模型类中我需要测试连接到SQL数据库。
这是我用来测试连接的方法。
public bool CheckSqlServer(string sqlHost, int sqlPort)
{
try
{
IPHostEntry ipHost = Dns.Resolve(sqlHost);
IPAddress ipAddr = ipHost.AddressList[0];
var tcpCli = new TcpClient();
tcpCli.Connect(ipAddr, sqlPort);
tcpCli.Close();
return true;
}
catch
{
return false;
}
}
我在另一个线程中调用此方法
//IP is worng
if (Task<bool>.Factory.StartNew(()=>CheckSqlServer("10.10.10.20",1521)).Result)
{
Insert();
}
问题是WPF的UI仍然冻结我不知道为什么,因为我在新线程中调用此方法而不是在UI线程中。
答案 0 :(得分:0)
在if
中,您可以立即致电结果。这使得调用线程以阻塞方式等待任务。
你应该工作,例如在ContinueWith
上使用Task
。一旦完成第一个任务的执行,就会调用它。但是要小心使用SynchronizationContext!
此外,您不应该在另一个线程中调用TaskFactory等。任务的重点是从使用“低级”线程中抽象并行性。
答案 1 :(得分:0)
尝试将代理设置为null,以便禁用默认自动发现。
http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.proxy.aspx