Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
冻结WPF UI-视图模型类中的多线程_Wpf_Multithreading_Caliburn.micro_Freeze - Fatal编程技术网

冻结WPF UI-视图模型类中的多线程

冻结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

嗨,我使用带有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();
        }
//IP正在运行
if(Task.Factory.StartNew(()=>CheckSqlServer(“10.10.10.20”,1521)).Result)
{
插入();
}

问题是WPF的UI仍然冻结,我不知道为什么,因为我在新线程中调用此方法,而不是在UI线程中调用。

在您的
中,如果您直接调用结果。这使得调用线程以阻塞方式等待任务

例如,您应该在
任务上使用
ContinueWith
。第一个任务的执行完成后将调用该函数。不过,要小心SynchronizationContext


另外,您不应该在另一个线程中调用TaskFactory等。整个任务的要点是将并行性从使用“低级”线程中抽象出来。

尝试将代理设置为null,以便禁用默认的自动发现