冻结WPF UI-视图模型类中的多线程
嗨,我使用带有Caliburn Micro的WPF和视图模型类,我需要测试到SQL数据库的连接 下面是我用来测试连接的方法冻结WPF UI-视图模型类中的多线程,wpf,multithreading,caliburn.micro,freeze,Wpf,Multithreading,Caliburn.micro,Freeze,嗨,我使用带有Caliburn Micro的WPF和视图模型类,我需要测试到SQL数据库的连接 下面是我用来测试连接的方法 public bool CheckSqlServer(string sqlHost, int sqlPort) { try { IPHostEntry ipHost = Dns.Resolve(sqlHost); IPAddress ipAddr = ipHost.Address
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();
}
//IP正在运行
if(Task.Factory.StartNew(()=>CheckSqlServer(“10.10.10.20”,1521)).Result)
{
插入();
}
问题是WPF的UI仍然冻结,我不知道为什么,因为我在新线程中调用此方法,而不是在UI线程中调用。在您的
中,如果您直接调用结果。这使得调用线程以阻塞方式等待任务
例如,您应该在任务上使用ContinueWith
。第一个任务的执行完成后将调用该函数。不过,要小心SynchronizationContext
另外,您不应该在另一个线程中调用TaskFactory等。整个任务的要点是将并行性从使用“低级”线程中抽象出来。尝试将代理设置为null,以便禁用默认的自动发现