我有一个关于在代码中使用 DispatcherTimer 的问题。请看我下面的情况:
private void CheckShow(object sender, System.Windows.RoutedEventArgs e)
{
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1);
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Start();
string etime = DateTime.Now.Second.ToString();
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
if(System.IO.File.Exists(@"C:\Default.xml"))
{
LoadingRecent.Text = "Loading Default Show...";
LoadBar.Opacity = 100;
string time1 = DateTime.Now.Millisecond.ToString();
string time2 = DateTime.Now.Second.ToString();
double huidigetijd = System.Convert.ToDouble(time2 + "." + time1);
LoadBar.Value = huidigetijd;
Remainingnummer.Text = Convert.ToString(10 - DateTime.Now.Second);
string etime = DateTime.Now.Second.ToString();
if (etime == "10")
{
var provider = (XmlDataProvider)this.Resources["CUEData"];
var loadfilepath = @"C:\Default.xml";
provider.Source = new Uri(loadfilepath, UriKind.Absolute);
Storyboard Hoofdvenster = (Storyboard)Resources["Hoofdvenster"];
Hoofdvenster.Begin(this, true);
}
正如您在顶部函数中看到的那样,我启动了计时器,然后在 Tick 中,当计时器达到十秒时,我做了一些事情。但是我想在 if 语句中停止调度计时器,但随后出现上下文错误。
那么如何在不同的函数中停止计时器呢?
更新:我尝试适应您的解决方案,但出现对象引用未设置为实例错误
public void CheckShow(object sender, System.Windows.RoutedEventArgs e)
{
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1);
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Start();
string etime = DateTime.Now.Second.ToString();
if (etime == "13")
{
dispatcherTimer.Stop();
LoadingRecent.Text = "You are currently working on a show. Press New or Load to create or load a different show";
LoadBar.Opacity = 0;
}
}
private DispatcherTimer dispatcherTimer;
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
if(System.IO.File.Exists(@"C:\Default.xml"))
{
LoadingRecent.Text = "Loading Default Show...";
LoadBar.Opacity = 100;
string time1 = DateTime.Now.Millisecond.ToString();
string time2 = DateTime.Now.Second.ToString();
double huidigetijd = System.Convert.ToDouble(time2 + "." + time1);
LoadBar.Value = huidigetijd;
Remainingnummer.Text = Convert.ToString(10 - DateTime.Now.Second);
string etime = DateTime.Now.Second.ToString();
if (etime == "10")
{
var provider = (XmlDataProvider)this.Resources["CUEData"];
var loadfilepath = @"C:\Default.xml";
provider.Source = new Uri(loadfilepath, UriKind.Absolute);
Storyboard Hoofdvenster = (Storyboard)Resources["Hoofdvenster"];
Hoofdvenster.Begin(this, true);
dispatcherTimer.Stop();
}