我的目标是读取 NFC,它会触发数据库中的数据检查。不同的响应应显示不同的表单/面板(尚未实施)。我尝试过使面板可见/不可见,显示新表单和新用户控件。
除了更新 UI 外,一切正常。我已将 MessageBox 放在 dataBaseGetData 中,它也可以工作。
公共部分类Form1:Form {
private static string comNumber = "COM1";
private static string dataBaseServer = "SERVER";
private static string dataBaseName = "db";
private static string dataBaseLogin = "login";
private static string dataBasePassword = "password";
private static SerialPort portNFC = new SerialPort(comNumber, 9600, Parity.None, 8, StopBits.One);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
openSerialPortNFC();
}
[STAThread]
private static void openSerialPortNFC()
{
try
{
portNFC.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
portNFC.Open();
portNFC.DiscardInBuffer();
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private static void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string received = portNFC.ReadExisting();
Form1 serialPortProgram = new Form1();
Thread connectToDatabase = new Thread(() => serialPortProgram.dataBaseGetData(received));
connectToDatabase.Start();
Thread.Sleep(1500);
portNFC.DiscardInBuffer();
}
private void dataBaseGetData(string NFCcode)
{
try
{
string connetionString = @"Data Source=" + dataBaseServer + ";Initial Catalog=" + dataBaseName + ";User ID=" + dataBaseLogin + ";Password=" + dataBasePassword;
SqlConnection connector;
connector = new SqlConnection(connetionString);
connector.Open();
string query = "select * from tTeacher where wuebCardID = " + "'" + NFCcode + "'";
SqlCommand command = new SqlCommand(query, connector);
SqlDataReader reader = command.ExecuteReader();
reader.Read();
string received = reader[6].ToString();
reader.Close();
if (received.Length > 0)
{
MessageBox.Show(this, received);
Update();
}
connector.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private void addUserControl(UserControl userControl)
{
userControl.Location = new System.Drawing.Point(586, 395);
Controls.Clear();
Controls.Add(userControl);
userControl.BringToFront();
}
new void Update()
{
BeginInvoke((Action)delegate ()
{
UserControls.LogInWindow uc = new UserControls.LogInWindow();
addUserControl(uc);
});
}
}