I am writing an app, still, where I need to test some devices every minute for 30 minutes. It made sense to use a timer set to kick off every 60 secs and do whats required in the event handler.
However, I need the app to wait for the 30 mins until I have finished with the timer since the following code alters the state of the devices I am trying to monitor.
I obviously don't want to use any form of loop to do this. I thought of using another windows form, since I also display the progress, which will simply kick off the timer and wait until its complete.
The problem I am having with this is that I use a device Class and cant seem to get access to the methods in the device class from the 2nd (3rd actually - see below) windows form.
I have an initial windows form where I get input from the user, then call the 2nd windows form where it work out which tests need to be done and which device classes need to be used, and then I want to call the 3rd windows form to handle the timer.
I will have up to 6-7 device classes and so wanted to only instantiate them when actually requiring them, from the 2nd form.
Should I have put this logic into the 1st windows form (program class ??) ?
Would I not still have the problem of not being able to access device class methods from there too ?
Anyway, perhaps someone knows of a better way to do the checks every minute without the rest of the code executing (and changing the status of the devices) or how I should be accessing the methods in the app ??
Hi,
The following is the "calling" form -
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace TestCall
{
public partial class Form1 : Form
{
NDTClass NDT = new NDTClass();
public Form1()
{
InitializeComponent();
NDT.NDTOpen();
NDT.NDT1_CMD1();
(new Form2()).ShowDialog();
NDT.NDTClose();
}
public class NDTClass
{
public static double SWVolt = 0.5;
public static string Rxstring = "";
public SerialPort port = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
public string NDTOpen()
{
port.Open();
port.Write("CURRENT ?\r\n");
return Rxstring;
}
public void NDTClose()
{
port.Close();
}
public void NDT1_CMD1()
{
port.Write("DUAL MODE\r\n");
}
}
}
}
The following is the called form -
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TestCall
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
Form1.NDTClass.SWVolt = 99;
NDT.NDT1_CMD1();
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
}
The NDT.NDT1_CMD1() in the called form gives me the following error in the build -
Error 1 The name 'NDT' does not exist in the current context
The use of the variable SWVolt within the NDTClass works fine but the use of the method in the class is not possible.
What have I done wrong ??
Thanks, George. (I hope the formatting comes out corrrectly too).