[英]C#, event handler error with Serial Port
我正在为串行IO端口编写数据接收事件...以下是代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO; //add namespaces
using System.IO.Ports;
public class Program
{
//define a delegate class to handle DataReceived events
internal delegate void SerialDataReceivedEventHanderDelegate(object sender,SerialDataReceivedEventArgs e);
internal void DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//place code to read and process data here
}
static void Main()
{
string myComPortName=null;
//1. find available COM port
string[] nameArray = null;
nameArray = SerialPort.GetPortNames();
if(nameArray.GetUpperBound(0)>0) {
myComPortName = nameArray[0];
}
else {
Console.WriteLine("Error");
return;
}
//2. create a serialport object
// the port object is closed automatically by use using()
SerialPort myComPort = new SerialPort();
myComPort.PortName = myComPortName; //the default paramit are 9600,no parity,one stop bit, and no flow control
private static SerialDataReceivedEventHandler SerialDataReceivedEventHandler1 =
new SerialDataReceivedEventHandler(ComPort.DataReceived);
myComPort.DataReceived+=SerialDataReceivedEventHandler1;
}
}
为什么在VS2010中,行:私有静态SerialDataReceivedEventHandler SerialDataReceivedEventHandler1 = new SerialDataReceivedEventHandler(ComPort.DataReceived);
向我显示:1.无效的表达术语“私人” 2.修饰语“静态”对此术语无效3.我应该在此处使用Comport吗? 或只是DataReceived ...因为它的函数名称
感谢您的回复。
private
和static
在方法范围内无效。 您只能在类级别声明静态项-即在这里:
public class Program
{
private static object _memberField;
private static void MemberMethod()
{
// not here:
// private static object _insideMethod; // <- will not work
}
}
不需要私有静态,只需:-
var SerialDataReceivedEventHandler1 =
new SerialDataReceivedEventHandler(ComPort.DataReceived);
但是如果您希望成为Program类的成员,请将声明移至:-
public class Program
{
private static SerialDataReceivedEventHandler;
那你需要在Main
SerialDataReceivedEventHandler1 =
new SerialDataReceivedEventHandler(ComPort.DataReceived);
但是更有可能的是,您真的想开始自己的类,因为“程序”并不是真正的最佳选择。...并且处理静态类和静态方法有点混乱
private
用于控制类型成员或类型本身的可访问性。 它不适用于作为方法一部分的变量,因为方法本身已经可以最方便地访问它。
此外,静态修饰符也无效。 它也适用于某种类型的成员,以指示该成员是否知道实例。
您的电话:
private static SerialDataReceivedEventHandler SerialDataReceivedEventHandler1 =
new SerialDataReceivedEventHandler(ComPort.DataReceived);
应该:
SerialDataReceivedEventHandler SerialDataReceivedEventHandler1 =
new SerialDataReceivedEventHandler(ComPort.DataReceived);
但是,该行似乎完全没有必要。 您可以将其简化为:
myComPort.DataReceived += ComPort.DataReceived;
该行位于main方法内部。 私有和静态仅在方法之外被允许。
private限定词仅适用于您的类定义中的成员(成员变量/方法)。 SerialDataReceivedEventHandler只是方法内部具有的变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.