C# 安装时程序没有响应
我已经编写了一个小工具来对数据库运行大量查询,当从VisualStudio运行它时,应用程序工作得非常好。进度条进展顺利,一切都相当顺利 但是,当我在Windows 10计算机上安装程序并运行查询时,表单停止响应 代码运行单线程,所以我的问题是:为什么表单在VisualStudio上运行时会更新进度条,为什么它在安装时不响应 我真的不知道如何解决这个问题,因为两个实例上的代码完全相同。我是否错误地配置了安装程序C# 安装时程序没有响应,c#,database,C#,Database,我已经编写了一个小工具来对数据库运行大量查询,当从VisualStudio运行它时,应用程序工作得非常好。进度条进展顺利,一切都相当顺利 但是,当我在Windows 10计算机上安装程序并运行查询时,表单停止响应 代码运行单线程,所以我的问题是:为什么表单在VisualStudio上运行时会更新进度条,为什么它在安装时不响应 我真的不知道如何解决这个问题,因为两个实例上的代码完全相同。我是否错误地配置了安装程序 using (var command = new SqlCommand(comman
using (var command = new SqlCommand(commandText, connection))
{
command.CommandType = System.Data.CommandType.Text;
command.ExecuteNonQuery();
progressBar.PerformStep();
}
我希望无论是在Visual Studio上运行还是在本地安装,程序的行为都是相同的,但事实并非如此。查询必须在单独的线程上运行。BackgroundWorkers可以用来单独运行它,同时仍然不时更新主线程 我不能回答为什么,但是如果你正在执行一个长时间运行的操作,你真的应该在另一个线程上执行它。原因是,正如你所看到的,你的状态将被锁定。我很困惑它是在调试时工作的。我想让它单线程运行的原因正是为了更新进度条。如果在一个单独的线程上运行数据库,我不确定是否能够跟踪已经针对该数据库运行了多少查询。可能吗?当然可能。只要有一些变量,并使用Interlocked.increment对其进行递增。如果您是正确的,您只能从主线程更新进度条。BackgroundWorkers虽然过时了,但有一个名为ProgressChanged的事件,它将在订阅它的线程上执行。因此,您可以运行单独的线程,并偶尔更新主线程。