C# 不止一个,独立的调度员?
我想创建几个计时器,倒计时x时间,独立工作,在textBlock中更新时间,完成后做一些事情 于是我写道:C# 不止一个,独立的调度员?,c#,windows-phone-8,dispatchertimer,C#,Windows Phone 8,Dispatchertimer,我想创建几个计时器,倒计时x时间,独立工作,在textBlock中更新时间,完成后做一些事情 于是我写道: private DispatcherTimer d1, blueTimer; private void but1_Click(object sender, RoutedEventArgs e) { if (redTimer == null) { d1 = new System.Windows.Threading.DispatcherTimer();
private DispatcherTimer d1, blueTimer;
private void but1_Click(object sender, RoutedEventArgs e)
{
if (redTimer == null)
{
d1 = new System.Windows.Threading.DispatcherTimer();
d1.Tick += new EventHandler(d1_Tick);
d1.Interval = new TimeSpan(0, 0, 1);
d1.Start();
}
}
private void but2_Click(object sender, RoutedEventArgs e)
{
if (d2 == null)
{
d2 = new System.Windows.Threading.DispatcherTimer();
d2.Tick += new EventHandler(d2_Tick);
d2.Interval = new TimeSpan(0, 0, 1);
d2.Start();
}
}
private void d1_Tick(object sender, EventArgs e)
{
int time = string2time(t1.Text);
if (time > 0)
{
t1.Text = time2string(--time);
}
else
{
d1.Stop();
}
}
private void d2_Tick(object sender, EventArgs e)
{
int time = string2time(t2.Text);
if (time > 0)
{
t2.Text = time2string(--time);
}
else
{
d2.Stop();
}
}
例如,时间为15秒。当我点击but1时,时间是倒计时,当t1是10秒时,我点击but2,t2也是10秒,倒计时的时间是相同的
为什么会这样?
如何避免这种情况?Sry误读了代码。我再看看 你能发布“string2time”和“time2string”的代码吗 还要检查您的实际代码是否与发布的代码相同:
private DispatcherTimer d1, blueTimer; // <-- d1 and blueTimer? blueTimer is never
//mentioned. However a "redTimer" object appears in your code
private void but1_Click(object sender, RoutedEventArgs e)
{
if (redTimer == null) // <-- shouldn´t this be "(d1 == null)"?
{
d1 = new System.Windows.Threading.DispatcherTimer();
d1.Tick += new EventHandler(d1_Tick);
d1.Interval = new TimeSpan(0, 0, 1);
d1.Start();
}
}
private void but2_Click(object sender, RoutedEventArgs e)
{
if (d2 == null)
{
d2 = new System.Windows.Threading.DispatcherTimer();
d2.Tick += new EventHandler(d2_Tick);
d2.Interval = new TimeSpan(0, 0, 1);
d2.Start();
}
}
私人调度程序d1,blueTimer;//我看不出你的代码有什么错(好吧,time2string
和string2time
方法增加了一层无用的复杂性,你应该操作TimeSpan
对象,但这不是重点)。我认为您应该尝试在d1_Tick
和d2_Tick
方法的第一行上放置一个断点,然后一步一步地执行代码以了解发生了什么。或者使用System.Diagnostics.Debug.WriteLine
方法显示修改前后t1.Text
和t2.Text
的值。
private string time2string(int time)
{
string stime = "";
int m, s = 0;
m = time / 60;
//s = time - m * 60;
s = time % 60; // this is a modulo, it will divide the number by 60 and provide the
// rest. Learn to use it, it may save you a lot of work sometimes.
//stime = m < 10 ? "0" + m.ToString() : m.ToString();
//stime += ":" + (s < 10 ? "0" + s.ToString() : s.ToString());
stime = string.Format("{0:D2}:{1:D2}", m, s}; // does the same as the two previous lines
return stime;
}