Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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# 安装时程序没有响应_C#_Database - Fatal编程技术网

C# 安装时程序没有响应

C# 安装时程序没有响应,c#,database,C#,Database,我已经编写了一个小工具来对数据库运行大量查询,当从VisualStudio运行它时,应用程序工作得非常好。进度条进展顺利,一切都相当顺利 但是,当我在Windows 10计算机上安装程序并运行查询时,表单停止响应 代码运行单线程,所以我的问题是:为什么表单在VisualStudio上运行时会更新进度条,为什么它在安装时不响应 我真的不知道如何解决这个问题,因为两个实例上的代码完全相同。我是否错误地配置了安装程序 using (var command = new SqlCommand(comman

我已经编写了一个小工具来对数据库运行大量查询,当从VisualStudio运行它时,应用程序工作得非常好。进度条进展顺利,一切都相当顺利

但是,当我在Windows 10计算机上安装程序并运行查询时,表单停止响应

代码运行单线程,所以我的问题是:为什么表单在VisualStudio上运行时会更新进度条,为什么它在安装时不响应

我真的不知道如何解决这个问题,因为两个实例上的代码完全相同。我是否错误地配置了安装程序

using (var command = new SqlCommand(commandText, connection))
{
    command.CommandType = System.Data.CommandType.Text;
    command.ExecuteNonQuery();
    progressBar.PerformStep();
}

我希望无论是在Visual Studio上运行还是在本地安装,程序的行为都是相同的,但事实并非如此。

查询必须在单独的线程上运行。BackgroundWorkers可以用来单独运行它,同时仍然不时更新主线程

我不能回答为什么,但是如果你正在执行一个长时间运行的操作,你真的应该在另一个线程上执行它。原因是,正如你所看到的,你的状态将被锁定。我很困惑它是在调试时工作的。我想让它单线程运行的原因正是为了更新进度条。如果在一个单独的线程上运行数据库,我不确定是否能够跟踪已经针对该数据库运行了多少查询。可能吗?当然可能。只要有一些变量,并使用Interlocked.increment对其进行递增。如果您是正确的,您只能从主线程更新进度条。BackgroundWorkers虽然过时了,但有一个名为ProgressChanged的事件,它将在订阅它的线程上执行。因此,您可以运行单独的线程,并偶尔更新主线程。