2016-03-02 4 views
1

Я создаю приложение WPF для имитации трафика. Я хочу, чтобы Car s имела задержку реакции на 1 секунду для изменения их ускорения без остановки всего приложения. Для этого я хочу получить переменную elapsed из моего класса Car. Переменная переменной elapsed хранит, сколько времени прошло.Доступ к переменной MainWindow из класса

Код в MainWindow:

namespace TrafficTester 
{ 
    public partial class MainWindow : Window 
    { 
     Timer timer = new Timer(); 

public MainWindow() 
    { 
     InitializeComponent(); 
     //create the timer 
     timer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
     timer.Interval = timerInterval; 
     timer.Enabled = true; 

     //... 

     void OnTimedEvent(object source, ElapsedEventArgs e) 
     { 
      timer.Enabled = false; //stop timer whilst updating, so updating won't be called again before it's finished 
      update(); // 
      timer.Enabled = true; 
      elapsed += timerInterval; 
     } 
    } 
} 

Код в классе Car:

namespace TrafficTester 
{ 
    public class Car 
    { 

    //... 

     public void changeAccel(double val) 
     { 
      int time = MainWindow.elapsed; 
      int stop = MainWindow.elapsed + reactDelay; 
      while (time < stop) 
      { 
       time = MainWindow.elapsed; 
      } 
      accel = val; 
     } 
    } 
} 

accel является текущим ускорение и val это новое ускорение. MainWindow.elapsed должен вызывать переменную elapsed от MainWindow, но это не так. Как я могу назвать это из класса Car?

+0

В чем вопрос? –

+0

К сожалению, я, наверное, должен был сказать это немного более четко. Я не могу получить прошедшую переменную в MainWindow из класса Car. Я просто отредактировал этот вопрос. – Czh

+0

Как создать новый экземпляр 'Car' в' MainWindow'? – Sakura

ответ

1

Я видел как минимум 2 проблемы:
- Если вы хотите получить доступ к таймеру, он должен быть общедоступным.
- Затем вы можете получить к нему доступ через экземпляр вашего Mainwindow.

Чтобы получить прошедшее время, как вы, вероятно, захотите, вам нужно пройти от вас ElapsedEventHandler и выполнить там временное действие!

public partial class MainWindow : Window 
{ 
    public System.Timers.Timer myTimer = new System.Timers.Timer(); 

    public MainWindow() 
     { 

    //create the timer 
    myTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); // Where is it? 
    myTimer.Interval = 5; 
    myTimer.Enabled = true; 
     } 
    //... 

    void OnTimedEvent(object source, ElapsedEventArgs e) 
    { 
     myTimer.Enabled = false; //stop timer whilst updating, so updating won't be called again before it's finished 
     //update(); // 
     myTimer.Enabled = true; 
    // Timer.Elapsed += 5; 
    } 
} 

public class Car 
{ 
    public void changeAccel(double val) 
    { 
     var myWin = (MainWindow)Application.Current.MainWindow; 
     int time = myWin.myTimer.Elapsed; //<-- you cannot use it this way 

    } 
} 
+1

Спасибо! Я немного изменил то, что вы сказали, и теперь это работает :) – Czh

+0

добро пожаловать. PLS принять мой ответ –

 Смежные вопросы

  • Нет связанных вопросов^_^