잠시 기다려주십시오 상자가 화면에 표시되는 동안 주 양식을 잠그려고하지만 작동하지 않습니다. 여기 내 딜레마가있다.C#에서는 어떻게 폼을 잠글 수 있습니까?
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;
}
}
'양식 잠금'이란 무엇입니까? 이러한 기능이 실행되는 동안 사용자가 컨트롤을 클릭하지 못하게합니까? – IAbstract
임포 "기다려주세요"상자를 대화 상자로 열어야합니다. 그 밑에있는 양식은 "잠겨"있습니다. –