2
我有一个tabpage
用户控件和3个属性页,用于tabpage
用户控件,它们是动态分配的。该tabpage控件将显示在对话框中。如何在显示Windows对话框后进行处理?
对于tabpage控件的数据处理和过滤需要更多的时间,并且这会导致在打开对话框之前出现超过10秒的繁忙图标。
我想显示一个空的Dialog
打开并显示繁忙的图标,同时处理和数据过滤完成并最终显示在Dialog
内部。
这基本上改变了处理的顺序。
但是,我无法做到这一点,并且一旦打开对话框,它将等待用户输入,并在给出输入后才会进入下一行。 (如在调试期间观察到的)。
在下面的代码中,行MnemonicSelector.InitializeMnemonicSelectorParameters(parameters);
负责处理和移动showdialog后导致对象未找到操作,当用户单击对话框下属性页面内的任何项目。
public override MnemonicSelectorResult ShowMnemonicSelector(MnemonicSelectorSearchParameters parameters)
{
MnemonicSelector.InitializeMnemonicSelectorParameters(parameters);
ResizeMnemonicSelectorIfNeeded();
SetupMnemonicDialog(m_PropertyDialog, MnemonicSelector, MnemonicSelector.Title);
DialogResult dResult = ShowFakeDialog(m_PropertyDialog, MnemonicSelector.Title);
return MnemonicSelector.Result;
}
private void ResizeMnemonicSelectorIfNeeded()
{
if ((MnemonicSelector.ClientSize.Width < 909) || (MnemonicSelector.ClientSize.Height < 620))
m_PropertyDialog.ClientSize = new System.Drawing.Size(939, 697);
}
protected void SetupMnemonicDialog(PropertiesDialogControl propertydialog, PropertyPage page, string title)
{
List<PropertyPage> pages = new List<PropertyPage>();
pages.Insert(0, page);
PropertyPage[] propertyPages = pages.ToArray();
if (title != null)
propertydialog.Text = title;
propertydialog.SetPropertyPages(new List<PropertyPage>(propertyPages));
}
public virtual DialogResult ShowFakeDialog(Control contents, string title)
{
return ShowFakeDialog(contents, title, false, "");
}
public DialogResult ShowFakeDialog(Control contents, string title, bool isCancelButtonVisible, string cancelButtonText)
{
FakeDialog fakeDialog = new FakeDialog(this, contents, title, isCancelButtonVisible, cancelButtonText);
using (fakeDialog)
{
lock (this)
{
FakeDialog previousFakeDialog = _activeFakeDialog;
_activeFakeDialog = fakeDialog;
try
{
return fakeDialog.ShowDialog();
}
finally
{
_activeFakeDialog = previousFakeDialog;
}
}
}
}
请指点上我能实现所需的功能,其中,我可以显示对话框,后来加载属性页(处理)。
这是C#的问题吗? – VMAtm
显示一个对话框不可用10秒对用户没有帮助。使用BackgroundWorker获取数据,以便UI不会冻结。显示一个litte“我正在处理它,而不是死”窗口,同时它在一个像marquee模式下的进度条一样的动画中运行。关闭该窗口并在RunWorkerCompleted事件处理程序中显示对话框。 –