Проблема в том, что ваш номер требует большей точности, чем JavaScript.
Можете ли вы отправить номер в виде строки? Разделяется в двух частях?
Здесь есть два момента:
Конструктор вашей формы не может иметь модификатор async
. В качестве альтернативы вы можете использовать событие Load
.
(Необязательно) Вам не нужно передавать экземпляр «родительской» формы в конструктор, вы можете получить его непосредственно из свойства Owner
, если вы используете ShowDialog(this)
вместо ShowDialog()
.
Кроме того, не забудьте утилизировать любую диалоговую форму после того, как с ней покончено. Предпочтительно использовать его в блоке using
.
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
вы можете использовать любой тип, который лучше всего подходит для вашей ситуации.