我正在編寫一個應用程序,仍然需要每分鐘測試一些設備30分鐘。使用計時器設置每60秒啓動一次,並在事件處理程序中執行所需的操作是有意義的。無法訪問以前的Windows窗體中的類方法 - C#
不過,我需要的應用程序等待30分鐘,直到我與計時器完成,因爲下面的代碼改變我試圖監控設備的狀態。
我明顯不想使用任何形式的循環來做到這一點。我想過使用另一個窗體,因爲我也顯示了進度,它將啓動計時器並等待完成。
我與此遇到的問題是,我使用的設備類並不能似乎得到訪問來自第二設備類的方法(第3實際上 - 見下文)Windows窗體。
我有一個初始的窗體窗體,我從用戶那裏獲得輸入,然後調用第二個窗體窗體,在窗體上顯示哪些測試需要完成以及需要使用哪些設備類,然後我想調用第三窗口窗體來處理定時器。
我最多將有6-7設備類等想只有實例化它們在實際要求他們,從第2形態。
我應該把這個邏輯放入第1個窗體窗體(程序類??)嗎?
我是否仍然無法從那裏訪問設備類方法?
無論如何,也許有人知道更好的方法做檢查每分鐘不代碼執行(和改變設備的狀態),或者我應該如何被訪問的應用程序的方法的其餘部分?
嗨,
以下是 「呼叫」 的形式 -
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");
}
}
}
}
以下是被叫形式 -
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)
{
}
}
}
的NDT.NDT1_CMD1()被調用的形式讓我在生成以下錯誤 -
Error 1 The name 'NDT' does not exist in the current context
在NDTClass中使用變量SWVolt可以正常工作,但不能在該類中使用該方法。
我做了什麼錯?
謝謝喬治。 (我希望格式也是正確的)。
是否有可能發佈一些代碼,以澄清問題可能是什麼?除非您希望與表單綁定的業務對象,否則從GUI邏輯中分離出業務邏輯可能會有所幫助。 – 2010-03-23 19:18:01
請發佈代碼,至少編譯_close_。 – 2010-03-23 19:22:54
好吧,我正試圖創建一個新的小應用程序,重新創建相同的問題。將盡快發佈 – George 2010-03-23 20:35:19