Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
C# 在不冻结WPF的情况下连接到SQL Server_C#_Sql Server_Wpf - Fatal编程技术网

C# 在不冻结WPF的情况下连接到SQL Server

C# 在不冻结WPF的情况下连接到SQL Server,c#,sql-server,wpf,C#,Sql Server,Wpf,当凭证正确时,一切似乎都顺利运行。但是,当我为SQL Server连接字符串输入错误的凭据时,它似乎会在我单击按钮的那一刻冻结,对话框仅在冻结后显示。我不知道异步连接的方法,但您可以设置连接超时 在DialogHost.Show上看不到等待的目的。当您在提供错误凭据的情况下尝试打开连接时,线程块会更长。尝试使用wait con.OpenAsync()而不是释放UI线程。当您尝试在提供错误凭据的情况下打开连接时,线程块的可能重复出现的时间更长。尝试使用wait con.OpenAsync()安装

当凭证正确时,一切似乎都顺利运行。但是,当我为SQL Server连接字符串输入错误的凭据时,它似乎会在我单击按钮的那一刻冻结,对话框仅在冻结后显示。

我不知道异步连接的方法,但您可以设置连接超时


在DialogHost.Show上看不到等待的目的。

当您在提供错误凭据的情况下尝试打开连接时,线程块会更长。尝试使用
wait con.OpenAsync()而不是释放UI线程。

当您尝试在提供错误凭据的情况下打开连接时,线程块的可能重复出现的时间更长。尝试使用
wait con.OpenAsync()安装。您的用户是否要输入数据库连接的凭据?通常不是个好主意。我建议延长连接超时时间而不是缩短连接超时时间可以提高安全性。连接超时时间只会影响连接或查询吗?此外,例如,如果我将其设置为1秒,是否足以建立成功的连接?或者换句话说,使用正确的凭据连接是否需要不到1秒的时间?文档对我来说非常清楚。我不能为您的环境说话。这似乎可行,但除非我更改超时,否则显示对话框的时间太长(但是的,不是冻结)。例如,在返回对话框/数据库回复之前,是否可以显示我的循环progressbar?async将帮助您不阻止UI线程,但根据您的代码,对话框仅在连接打开后出现。这是您的意图吗?UI不再冻结。但是,例如,如果将连接超时设置为30,则UI不会发生任何变化。相反,用户将等待30秒,直到对话框出现,并告诉他连接未成功。所以我想问的是,如果我能做些什么?就像在我点击按钮和返回失败连接之间显示进度条一样?酷。如何实现进度条,我建议大家再看一个这样的帖子:谢谢,我来看看。现在,您提到了,如果您不介意的话,BackGroundWorker/delegate调用和我刚才提到的异步之间有什么区别?他们不是为了同样的目的吗?
private async void Button_Click(object sender, RoutedEventArgs e)
{
    var sampleMessageDialog = new SampleMessageDialog
            {
                Message = { Text = "Failed to connect" }
            };

    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionS"].ConnectionString);

    try
    {
        con.Open();
        //  await DialogHost.Show(sampleMessageDialog, "RootDialog");
        con.Close();
    }
    catch (Exception ex)
    {
        await DialogHost.Show(sampleMessageDialog, "RootDialog");
    }
}