我如何从另一个void c#中获取一个对象

How do I get an object from another void c#

我想从 Timer_Elapsed 方法更改 item.header。我怎样才能实现它? 这是我的代码:

namespace Oceansurfer
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.Interval = 5000;
            timer.AutoReset = true;
            timer.Elapsed += Timer_Elapsed;
            timer.Start();
        }

        public void TabView_Loaded(object sender, RoutedEventArgs e)
        {
            TabViewItem item = CreateNewTab(1);
            item.Header = Shared.FileHelper.ReadTitleFromFile();
            (sender as TabView).TabItems.Add(item);
        }
        public void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {    
        }
    }
}

拜托,如果你能回答这个问题,我将不胜感激。

您不能从另一个方法中访问一个方法的局部变量。但是,有多种方法可以在不同的方法中访问同一个对象。程序方法是 return 它作为一种方法的结果 and/or 将它作为参数传递给另一种方法。面向对象(推荐)的方法是,当方法都是同一个class的一部分时,为要在多个方法中访问的对象创建一个字段(或属性)。

您可以定义一个私有成员,在这种情况下,当前class的所有方法都可以访问该项目,或者您可以使用TabView 的TabItems 来获取最新的项目。另外,如果要在Timer_Elapsed方法中改变TabeViewItem的Header,由于定时器是和工作线程一起使用的,而UI需要在UI线程中更新,所以需要使用 Dispatcher.RunAsync 方法返回到 UI 线程。

private TabViewItem currentItem;

public async void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        //TabViewItem item = Tabs.TabItems[Tabs.TabItems.Count-1] as TabViewItem;
        currentItem.Header = "hello2";
    });

}

private void Tabs_Loaded(object sender, RoutedEventArgs e)
{
    TabViewItem item = CreateNewTab(1);
    item.Header = Shared.FileHelper.ReadTitleFromFile();
    (sender as TabView).TabItems.Add(item);
    currentItem = item;
}