【问题标题】:How to use an object inside an EventHandler如何在 EventHandler 中使用对象
【发布时间】:2011-11-13 12:22:46
【问题描述】:

这是我在 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 构造器之后,我有 dtTick EventHandler 来做某事,还有一个 EventHandler 用于启动按钮以使计时器工作

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() 中的对象上调用的方法。

【问题讨论】:

  • 这是 WPF 还是 SL 还是什么?
  • 这是一个 Windows Phone 应用程序
  • 这里的关键字是scope

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


【解决方案1】:

你不能让它以这种方式工作 - 在构造函数中声明的 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();
    }
}

【讨论】:

    【解决方案2】:

    在您的代码隐藏文件中,将 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(); 
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 2016-07-02
      相关资源
      最近更新 更多