Как выполнить обработку после отображения диалогового окна Windows? - PullRequest
2 голосов
/ 21 сентября 2011

У меня есть пользовательский элемент управления tabpage и 3 страницы свойств для пользовательского элемента управления 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;
            }
        }
    }
}

Пожалуйста, дайте совет, как я могу достичь желаемой функциональности, в которой я могу показать диалоговое окно и загрузить страницы свойств (обработка) позже.

1 Ответ

0 голосов
/ 01 февраля 2012

Вы должны использовать фоновый рабочий поток для этого. Проверьте это . Это должно помочь вам использовать фоновый рабочий для отделения анимации прогресса от логики обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...