我有一个方法,我用它来让用户输入时间。我已经设置了一旦按下按钮就会打开一个对话框。然后,用户可以选择时间,一旦用户选择填充文本视图的时间,但是我发现一旦对话框打开,则为textview分配其默认值null。它不等待。
当我使用Toast消息运行测试时,我可以看到底层代码确实有效但是它的顺序让我烦恼。
目前我试图实施await功能但没有用。
我附上了我的代码。感谢您的帮助或建议。顺便说一下,我对c#和xamarin来说相当新。
<<within on create>>
StartTimePickerBTN.Click += async delegate
{
OnCreateDialog().Show();
StartTimeTV.Text = (await UpdateTime()).ToString();
};
private void TimePickerCallback(object sender, TimePickerDialog.TimeSetEventArgs e)
{
hour = e.HourOfDay;
minute = e.Minute;
}
public async Task<string> UpdateTime()
{
string time = string.Format("{0}:{1}", hour, minute.ToString().PadLeft(2, '0'));
return time;
}
答案 0 :(得分:0)
您不是在等待UpdateTime
的来电,而是在{}返回的.ToString()
上拨打Task
,而不是string
。
您的事件处理程序应该
StartTimeTV.Text = (await UpdateTime()).ToString();
答案 1 :(得分:0)
我设法解决了我的问题但是我确定它不是最好的方法,但我会在下面发布我的代码。
现在加号是TextView在正确的阶段填充并等待用户选择。
Within OnCreate, Please note the bool is a class wide variable
StartTimePickerBTN.Click += delegate
{
SelectStartOrEndTime = true;
OnCreateDialog().Show();
};
EndTimePickerBTN.Click += delegate
{
SelectStartOrEndTime = false;
OnCreateDialog().Show();
};
protected Dialog OnCreateDialog()
{
return new TimePickerDialog(this, TimePickerCallback, hour, minute, false);
}
private void TimePickerCallback(object sender, TimePickerDialog.TimeSetEventArgs e)
{
hour = e.HourOfDay;
minute = e.Minute;
UpdateTime();
}
private void UpdateTime()
{
if (SelectStartOrEndTime == true)
{
StartTimeTV.Text = string.Format("{0}:{1}", hour, minute.ToString().PadLeft(2, '0'));
}
else
{
EndTimeTV.Text = string.Format("{0}:{1}", hour, minute.ToString().PadLeft(2, '0'));
}
}