从计时器调用函数



我正试图根据下面的tyo调用一个函数来确定压力值,但计时器无法访问对象"device"。解决这个问题最简单的方法是什么?请注意,按钮功能中的所有功能都非常完美。返回压力、序列号等

private void Button_Start_Logging_FMS_Data_Click(object sender, EventArgs e)
{
try
{

var devices = PX409Usbh.DetectDevices().ToList();
var device = devices[0];
if (devices.Count == 0)
{
MessageBox.Show("no devices found. Make sure the pressure sensor is connected");
return;
}
// Initialize each sensor so we can view the configuration and range.
foreach (var d in devices)
{
d.Initialize();
}
String Serial_Number = device.SerialNumber;
String Unit_Measurement = device.Units;
double Raw_External_Pressure = device.ReadPressure();

// Start Timer to Capture Data
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 1000;
aTimer.Enabled = true;
}
catch (Exception ex)
{
// If exception happens, it will be returned here
Logging.Write_To_Log_File("Error", MethodBase.GetCurrentMethod().Name, "", "", ex.ToString(), "", "", "", 2);
}
}

// Specify what you want to happen when the Elapsed event is raised.
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
double Raw_External_Pressure = device.ReadPressure();
}

也许可以使用System.Threading.Timers.Timer,它允许您将状态对象传递给回调方法(引用(,该方法被指定为包含回调方法要使用的信息的对象。

您可以使用lambda,它基本上只打包您的参数(senderargs(,并将您的device附加到事件处理程序方法调用中。

private void Button_Start_Logging_FMS_Data_Click(object sender, EventArgs e)
{
// The start of your method here.
aTimer.Elapsed += (sender, args) => ElapsedEventHandler(sender, args, device);
// The end of your method here.
}
private void ElapsedEventHandler(object sender, ElapsedEventArgs e, Device d)
{
// Do magical things with the Device here.
}

如果你不打算对Timer事件参数做任何事情,你可以简化为:

private void Button_Start_Logging_FMS_Data_Click(object sender, EventArgs e)
{
// The start of your method here.
aTimer.Elapsed += (sender, args) => ElapsedEventHandler(device);
// The end of your method here.
}
private void ElapsedEventHandler(Device d)
{
// Do magical things with the Device here.
}

最新更新