为什么当我使用计时器时 xaml 页面中的两个标签中只有第二个更新
Why is only the second of two labels in a xaml page updating when I use a timer
我有一个仅用于 Android 的应用程序,它有两个标签。它们都只是不同格式的倒计时表示。
当我通过按钮手动更新标签时,按下计算每个标签更新的剩余时间。
我现在添加了一个 System.Timers.Timer 设置为同时更新两个标签;但是,只有第二个(编码的)标签被更新,以我在代码中作为第二个标签为准。现在,当我按下按钮时也是如此。我错过了什么?
相关代码如下:
public MainPage()
{
InitializeComponent();
t.Interval = 1000;
t.Elapsed += t_Tick;
t.AutoReset = true;
t.Enabled = true;
calc(DateTime.Now);
}
private void OKbtnClick(object sender, EventArgs e)
{
calc(DateTime.Now);
}
public void calc(DateTime dt)
{
TimeSpan timeSpan = departure.Subtract(dt);
opt = String.Format("Days: {0:N0}", timeSpan.TotalDays);
opt += String.Format("\nHours: {0:N0}", timeSpan.TotalHours);
opt += String.Format("\nMinutes: {0:N0}", timeSpan.TotalMinutes);
opt += String.Format("\nSeconds: {0:N0}", timeSpan.TotalSeconds);
txtOutput.Text = opt;
txtCountdown.Text = timeSpan.ToString(@"d\:hh\:mm\:ss");
}
private void t_Tick(object sender, ElapsedEventArgs e)
{
calc(e.SignalTime);
}
请将您的代码输入 Device.BeginInvokeOnMainThread
:
public void calc(DateTime dt)
{
System.DateTime departure = new System.DateTime(2022, 2, 2, 22, 15, 0);
TimeSpan timeSpan = departure.Subtract(dt);
opt = String.Format("Days: {0:N0}", timeSpan.TotalDays);
opt += String.Format("\nHours: {0:N0}", timeSpan.TotalHours);
opt += String.Format("\nMinutes: {0:N0}", timeSpan.TotalMinutes);
opt += String.Format("\nSeconds: {0:N0}", timeSpan.TotalSeconds);
Device.BeginInvokeOnMainThread(() => {
txtOutput.Text = opt;
txtCountdown.Text = timeSpan.ToString(@"d\:hh\:mm\:ss");
});
}
我有一个仅用于 Android 的应用程序,它有两个标签。它们都只是不同格式的倒计时表示。 当我通过按钮手动更新标签时,按下计算每个标签更新的剩余时间。 我现在添加了一个 System.Timers.Timer 设置为同时更新两个标签;但是,只有第二个(编码的)标签被更新,以我在代码中作为第二个标签为准。现在,当我按下按钮时也是如此。我错过了什么? 相关代码如下:
public MainPage()
{
InitializeComponent();
t.Interval = 1000;
t.Elapsed += t_Tick;
t.AutoReset = true;
t.Enabled = true;
calc(DateTime.Now);
}
private void OKbtnClick(object sender, EventArgs e)
{
calc(DateTime.Now);
}
public void calc(DateTime dt)
{
TimeSpan timeSpan = departure.Subtract(dt);
opt = String.Format("Days: {0:N0}", timeSpan.TotalDays);
opt += String.Format("\nHours: {0:N0}", timeSpan.TotalHours);
opt += String.Format("\nMinutes: {0:N0}", timeSpan.TotalMinutes);
opt += String.Format("\nSeconds: {0:N0}", timeSpan.TotalSeconds);
txtOutput.Text = opt;
txtCountdown.Text = timeSpan.ToString(@"d\:hh\:mm\:ss");
}
private void t_Tick(object sender, ElapsedEventArgs e)
{
calc(e.SignalTime);
}
请将您的代码输入 Device.BeginInvokeOnMainThread
:
public void calc(DateTime dt)
{
System.DateTime departure = new System.DateTime(2022, 2, 2, 22, 15, 0);
TimeSpan timeSpan = departure.Subtract(dt);
opt = String.Format("Days: {0:N0}", timeSpan.TotalDays);
opt += String.Format("\nHours: {0:N0}", timeSpan.TotalHours);
opt += String.Format("\nMinutes: {0:N0}", timeSpan.TotalMinutes);
opt += String.Format("\nSeconds: {0:N0}", timeSpan.TotalSeconds);
Device.BeginInvokeOnMainThread(() => {
txtOutput.Text = opt;
txtCountdown.Text = timeSpan.ToString(@"d\:hh\:mm\:ss");
});
}