如何在EventHandler中使用对象

时间:2011-11-13 12:22:47

标签: c# windows-phone-7 event-handling

这是我在MainPage.xaml.cs

中的代码
public MainPage()
{
    InitializeComponent();
    DispatcherTimer dt = new DispatcherTimer();
    dt.Interval = new TimeSpan(0, 0, 0, 0, 1000); // 1 Second
    dt.Tick += new EventHandler(dtTick);
}

现在,我有MainPage Constractor和dtTick EventHandler来进行SOMETHING,还有一个EventHandler用于启动按钮以使Timer工作

void dtTick(object sender, EventArgs e)
{
    var time = DateTime.Parse(theTimer.Text);
    time = time.AddSeconds(1);
    theTimer.Text = time.ToString("HH:mm:ss");
}

private void startButton_Click(object sender, RoutedEventArgs e)
{
     dt.Start();
}

所以我的问题是如何使 dt.Start(); 工作,因为它是一个调用位于我的MainPage()中的对象的方法。

2 个答案:

答案 0 :(得分:2)

你无法以这种方式工作 - 构造函数中声明的dt仅限于构造函数,因此无法在其外部访问。

您需要做的是在模块级别声明dt,然后您可以在MainPage.xaml.cs中的任何位置访问它:

public class MainPage
{

    private DispatcherTimer _dt;

    public MainPage()
    {
        _dt = new DispatcherTimer();
    }

    private void startButton_Click(object sender, RoutedEventArgs e)
    {
         _dt.Start();
    }
}

答案 1 :(得分:1)

在您的代码隐藏文件中,将Timer公开为公共/受保护或私有成员或字段。

private DispatcherTimer dt = null; 

public MainPage()    
{    
    InitializeComponent();    
    this.dt = new DispatcherTimer();    
    this.dt.Interval = new TimeSpan(0, 0, 0, 0, 1000); // 1 Second    
    this.dt.Tick += new EventHandler(dtTick);    
}    

private void startButton_Click(object sender, RoutedEventArgs e) 
{ 
     if (this.dt != null)
              this.dt.Start(); 
}