从类访问 MainWindow 变量
本文关键字:变量 MainWindow 访问 | 更新日期: 2023-09-27 18:36:59
我正在制作一个 WPF 应用程序来模拟流量。我希望Car
的反应延迟为 1 秒,用于改变它们的加速度,而不会停止整个应用程序。为此,我想从我的Car
类中获取elapsed
变量。elapsed
变量存储经过的时间。
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
应该从 MainWindow 调用 elapsed
变量,但它没有。我怎么能从Car
课上调用它?
我至少看到了 2 个问题:
- 如果要访问计时器意图,它必须是公开的。
- 然后,您可以通过主窗口的实例访问它。
的时间,就像您可能想要的那样,您需要从经过事件处理程序中获取并在那里执行计时操作!
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
}
}