生成随机数并使用 INotifyPropertyChanged 更新 UI
Generating a random numbers and using INotifyPropertyChanged to Updating UI
我是 c# 的新手,目前正在开发一个程序。它有一个简单的 UI,有两个按钮(一个叫 on,另一个叫 off),还有一个文本框显示一些结果。基本上我想做的是,如果用户单击 "on" 按钮,在与 windows 不同的 class 表单上 每隔一秒生成一次随机数 使用一种方法。通过实施 INotifyPropertyChanged,我想让文本框知道该值已更新,以便文本框不断更新我们的新随机数。一旦用户点击 "off" 按钮,我想停止生成随机数。
我的windows表格
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SWE_Assignment
{
public partial class Monitor : Form
{
Patient newPatient = Patient.Instance;
public static bool pulseRateOn = false;
public Monitor()
{
InitializeComponent();
newPatient.PropertyChanged += _PulseRate_PropertyChanged;
}
private void Save_Click(object sender, EventArgs e)
{
// newPatient.PL(newPatient.startRnd = true;);
}
void _PulseRate_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "PulseRate")
{
HeartBeat.Text = newPatient.PulseRate.ToString();
}
}
private void Stop_Click(object sender, EventArgs e)
{
newPatient.startRnd = false;
}
}
}
我的病人Class
namespace SWE_Assignment
{
class Patient : INotifyPropertyChanged
{
private int _pulseRate;
public bool startRnd = false;
Random rnd = new Random();
public int PulseRate
{
get { return _pulseRate; }
set
{
_pulseRate = value;
OnPropertyChanged("PL");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string properyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(properyName));
}
private static Patient _instance = null;
private static readonly object _padlock = new object();
public static Patient Instance
{
get
{
lock (_padlock)
{
if (_instance == null)
{
_instance = new Patient();
}
return _instance;
}
}
}
public void PL(bool srt)
{
Timer timer = new Timer();
timer.AutoReset = true;
timer.Interval = 1000;
if (startRnd == true)
{
timer.Elapsed += PLS;
timer.Enabled = true;
timer.Start();
} else
{
timer.Enabled = false;
timer.Stop();
}
}
private void PLS(object sender, ElapsedEventArgs e)
{
PulseRate = rnd.Next(100, 150);
Console.WriteLine(PulseRate);
}
}
}
此外,我正在为我的患者使用单例模式,因为我只想拥有一个患者实例,这样我就可以访问另一个 class(称为警报)上的相同随机数来检查是否它大于或小于某个数字。我确实意识到我的 "Stop" 按钮有问题,因为它只会再次调用该方法,而不会停止来自 运行 的方法。如果有人能提供帮助,我将不胜感激。
有几处需要更改。
OnPropertyChanged("PL");
- 属性 的名字是 PulseRate
。 "PulseRate" 是您在事件处理程序中检查的内容。做到 OnPropertyChanged("PulseRate");
Timer timer = new Timer();
- 您应该只为每个患者创建一个计时器实例。最好在构造函数中完成。否则你将拥有多个 运行 份 Timer
可以通过启用 属性 来管理计时器:
调用 Start() 方法与将 Enabled
设置为 true
相同。同样,调用 Stop()
方法与将 Enabled
设置为 false
相同。
private void Stop_Click(object sender, EventArgs e)
{
// newPatient.startRnd = false;
newPatient.PL(false);
}
class Patient : INotifyPropertyChanged
{
Timer timer;
private Patient()
{
timer = new Timer();
timer.AutoReset = true;
timer.Interval = 1000;
timer.Elapsed += PLS;
}
Random rnd = new Random();
private int _pulseRate;
public int PulseRate
{
get { return _pulseRate; }
set
{
_pulseRate = value;
OnPropertyChanged("PulseRate");
}
}
public void PL(bool srt)
{
timer.Enabled = srt;
}
private void PLS(object sender, ElapsedEventArgs e)
{
PulseRate = rnd.Next(100, 150);
Console.WriteLine(PulseRate);
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string properyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(properyName));
}
private static Patient _instance = null;
private static readonly object _padlock = new object();
public static Patient Instance
{
get
{
lock (_padlock)
{
if (_instance == null)
{
_instance = new Patient();
}
return _instance;
}
}
}
}
我是 c# 的新手,目前正在开发一个程序。它有一个简单的 UI,有两个按钮(一个叫 on,另一个叫 off),还有一个文本框显示一些结果。基本上我想做的是,如果用户单击 "on" 按钮,在与 windows 不同的 class 表单上 每隔一秒生成一次随机数 使用一种方法。通过实施 INotifyPropertyChanged,我想让文本框知道该值已更新,以便文本框不断更新我们的新随机数。一旦用户点击 "off" 按钮,我想停止生成随机数。
我的windows表格
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SWE_Assignment
{
public partial class Monitor : Form
{
Patient newPatient = Patient.Instance;
public static bool pulseRateOn = false;
public Monitor()
{
InitializeComponent();
newPatient.PropertyChanged += _PulseRate_PropertyChanged;
}
private void Save_Click(object sender, EventArgs e)
{
// newPatient.PL(newPatient.startRnd = true;);
}
void _PulseRate_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "PulseRate")
{
HeartBeat.Text = newPatient.PulseRate.ToString();
}
}
private void Stop_Click(object sender, EventArgs e)
{
newPatient.startRnd = false;
}
}
}
我的病人Class
namespace SWE_Assignment
{
class Patient : INotifyPropertyChanged
{
private int _pulseRate;
public bool startRnd = false;
Random rnd = new Random();
public int PulseRate
{
get { return _pulseRate; }
set
{
_pulseRate = value;
OnPropertyChanged("PL");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string properyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(properyName));
}
private static Patient _instance = null;
private static readonly object _padlock = new object();
public static Patient Instance
{
get
{
lock (_padlock)
{
if (_instance == null)
{
_instance = new Patient();
}
return _instance;
}
}
}
public void PL(bool srt)
{
Timer timer = new Timer();
timer.AutoReset = true;
timer.Interval = 1000;
if (startRnd == true)
{
timer.Elapsed += PLS;
timer.Enabled = true;
timer.Start();
} else
{
timer.Enabled = false;
timer.Stop();
}
}
private void PLS(object sender, ElapsedEventArgs e)
{
PulseRate = rnd.Next(100, 150);
Console.WriteLine(PulseRate);
}
}
}
此外,我正在为我的患者使用单例模式,因为我只想拥有一个患者实例,这样我就可以访问另一个 class(称为警报)上的相同随机数来检查是否它大于或小于某个数字。我确实意识到我的 "Stop" 按钮有问题,因为它只会再次调用该方法,而不会停止来自 运行 的方法。如果有人能提供帮助,我将不胜感激。
有几处需要更改。
OnPropertyChanged("PL");
- 属性 的名字是 PulseRate
。 "PulseRate" 是您在事件处理程序中检查的内容。做到 OnPropertyChanged("PulseRate");
Timer timer = new Timer();
- 您应该只为每个患者创建一个计时器实例。最好在构造函数中完成。否则你将拥有多个 运行 份 Timer
可以通过启用 属性 来管理计时器:
调用 Start() 方法与将 Enabled
设置为 true
相同。同样,调用 Stop()
方法与将 Enabled
设置为 false
相同。
private void Stop_Click(object sender, EventArgs e)
{
// newPatient.startRnd = false;
newPatient.PL(false);
}
class Patient : INotifyPropertyChanged
{
Timer timer;
private Patient()
{
timer = new Timer();
timer.AutoReset = true;
timer.Interval = 1000;
timer.Elapsed += PLS;
}
Random rnd = new Random();
private int _pulseRate;
public int PulseRate
{
get { return _pulseRate; }
set
{
_pulseRate = value;
OnPropertyChanged("PulseRate");
}
}
public void PL(bool srt)
{
timer.Enabled = srt;
}
private void PLS(object sender, ElapsedEventArgs e)
{
PulseRate = rnd.Next(100, 150);
Console.WriteLine(PulseRate);
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string properyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(properyName));
}
private static Patient _instance = null;
private static readonly object _padlock = new object();
public static Patient Instance
{
get
{
lock (_padlock)
{
if (_instance == null)
{
_instance = new Patient();
}
return _instance;
}
}
}
}