我试图在屏幕上显示请稍候框时锁定主窗体,但它不起作用。这是我的困境。
我有 2 个表格。用户单击刷新按钮以加载 SQL Server 列表的主表单,以及在加载列表时显示的请等待表单。SQL Server 线程在使用 C# 时默认是一个单独的线程,它会锁定主线程以处理 SQL 请求。
我可以添加一个后台工作人员,但是我无法更新我的组合框以将列表显示为它的 UI 控件。如果我为此使用处理程序,请等待框的 show_dialog() 将停止锁定主窗体。
在主线程再次激活后,如何在不运行左键队列的情况下锁定此表单?我添加了用户等待时需要执行的代码。
public void PullServers()
{
bool ServersFound = false;
foreach (string Value in SQL.LocateSqlInstances())
{
this.cmbServer.Items.Add(Value);
ServersFound = true;
}
if (!ServersFound)
{
this.cmbServer.Items.Add(Strings.Lang("ddServerNoneFound"));
this.cmbServer.SelectedIndex = 0;
}
else
{
if (!s.empty(General.setting("SQLSERVER")))
{
this.cmbServer.Text = General.setting("SQLSERVER");
}
else
{
this.cmbServer.SelectedIndex = 0;
}
}
this.picRefreshServers.Image = Properties.Resources.Refresh;
}
public static Array LocateSqlInstances()
{
using (DataTable sqlSources = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources())
{
string Servers = null;
foreach (DataRow source in sqlSources.Rows)
{
string instanceName = source["InstanceName"].ToString();
if (!s.empty(instanceName))
{
Servers += source["ServerName"].ToString() + "\\" + instanceName + "[[SERVBREAK]]";
}
}
string[] ServersList = Servers.Split(new string[] { "[[SERVBREAK]]" }, StringSplitOptions.RemoveEmptyEntries);
return ServersList;
}
}