Как мне показать модальный диалог, который отслеживает задачу?

Проблема в том, что ваш номер требует большей точности, чем JavaScript.

Можете ли вы отправить номер в виде строки? Разделяется в двух частях?

-1
задан Ahmed Abdelhameed 31 March 2019 в 01:19
поделиться

1 ответ

Здесь есть два момента:

  1. Конструктор вашей формы не может иметь модификатор async. В качестве альтернативы вы можете использовать событие Load .

  2. (Необязательно) Вам не нужно передавать экземпляр «родительской» формы в конструктор, вы можете получить его непосредственно из свойства Owner, если вы используете ShowDialog(this) вместо ShowDialog() .

Кроме того, не забудьте утилизировать любую диалоговую форму после того, как с ней покончено. Предпочтительно использовать его в блоке using .

1126 Вот как бы я это сделал; В форме TaskObject:

internal async Task<bool> LongFunction()
{
    // Do some magic.
    // await ...

    return true;
}

public void MyFunc()
{
    using (MyDialog d = new MyDialog())
    {
        d.ShowDialog(this);
    }
}

В форме MyDialog:

private async void MyDialog_Load(object sender, EventArgs e)
{
    TaskObject owner = this.Owner as TaskObject;
    await owner.LongFunction();
    when_task_completes();
}

Если вы также хотите отслеживать ход выполнения LongFunction, вы можете добавьте к нему параметр Progress<T> и используйте его так:

internal async Task<bool> LongFunction(IProgress<string> progress)
{
    // Do some magic.
    progress.Report("Something interesting");
    // await ...
    // More magic.
    return true;
}

Затем вы можете сделать что-то вроде этого:

private async void MyDialog_Load(object sender, EventArgs e)
{
    TaskObject owner = this.Owner as TaskObject;

    var progress = new Progress<string>(s => when_LongFunction_does_something_interesting(s));
    await owner.LongFunction(progress);
    when_task_completes();
}

void when_LongFunction_does_something_interesting(string message)
{
    this.MyTextBox.Text = message;
}

Обратите внимание, что я использовал Progress<string> в качестве примера. Вместо string вы можете использовать любой тип, который лучше всего подходит для вашей ситуации.

0
ответ дан Ahmed Abdelhameed 31 March 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: