के लिए मुख्य() में ईवेंट हैंडलर जोड़ना मैं डेटा प्राप्त ईवेंट में ईवेंट हैंडलर की सदस्यता लेने का प्रयास करता हूं। ऐसा लगता है कि मैं इवेंट हैंडलर फ़ंक्शन नाम निर्दिष्ट नहीं कर सकता। मुझे समझ में नहीं आता क्यों
myComPort.DataReceived + = नया SerialDataReceivedEventHandler (comPort_DataReceived); मुझे त्रुटि संदेश दे रहा है। यहां समस्या है, उम्मीद है कि कोई भी इसका उत्तर दे सकता है।सीरियलपोर्ट
a busy cat http://img827.imageshack.us/img827/5904/20120125102247.png
a busy cat http://img444.imageshack.us/img444/3855/20120125102202.png
namespace serialport
{
public class Program
{
internal List<Byte> portBuffer = new List<Byte>(1024);
static void Main()
{
//1. find available COM port
string[] nameArray = null;
string myComPortName = 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.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);
myComPort.PortName = myComPortName;
//the default paramit are 9600,no parity,one stop bit, and no flow control
//3.open the port
try
{
myComPort.Open();
}
catch (UnauthorizedAccessException ex)
{
MessageBox.Show(ex.Message);
}
//Add timeout, p161
//reading Bytes
byte[] byteBuffer = new byte[10];
Int32 count;
Int32 numberOfReceivedBytes;
myComPort.Read(byteBuffer, 0, 9);
for (count = 0; count <= 3; count++)
{
Console.WriteLine(byteBuffer[count].ToString());
}
}
//The event handler should be static??
void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int numberOfBytesToRead;
numberOfBytesToRead = myComPort.BytesToRead;
byte[] newReceivedData = new byte[numberOfBytesToRead];
myComPort.Read(newReceivedData, 0, numberOfBytesToRead);
portBuffer.AddRange(newReceivedData);
ProcessData();
}
private void ProcessData()
{
//when 8 bytes have arrived, display then and remove them from the buffer
int count;
int numberOfBytesToRead = 8;
if (portBuffer.Count >= numberOfBytesToRead)
{
for (count = 0; count < numberOfBytesToRead; count++)
{
Console.WriteLine((char)(portBuffer[count]));
}
portBuffer.RemoveRange(0, numberOfBytesToRead);
}
}
}
}
+1। कुछ रिफैक्टरिंग बेहतर हो सकती है लेकिन प्रेषक कास्टिंग करने का सिद्धांत किसी भी घटना के उपयोग के लिए व्यापक रूप से उपयोगी होता है। – Chris
यदि आप एक उचित सी # प्रोग्राम चाहते हैं जो ओओपी सिद्धांतों का पालन करता है तो बहुत महत्वपूर्ण रिफैक्टरिंग निश्चित रूप से जरूरी है। मैंने इस तथ्य को भी छोड़ दिया कि अन्य उदाहरण विधियों और चर अभी भी एक समस्या होगी, मैंने केवल कोड प्रदान करने के बजाय उत्तर शैक्षिक उत्तर रखने की कोशिश की, इसलिए थोड़ा और अनुसंधान आवश्यक है;) – madd0
तो घोषित करें विधि स्थैतिक यह एक उदाहरण के बजाय एक प्रकार से संबंधित है, है ना? यदि हां, तो क्या हमें हमेशा ईवेंट हैंडलर को स्थैतिक घोषित करना चाहिए? मुझे लगता है कि अगर मैं कक्षा के सदस्य के रूप में mycomport डालता हूं, तो यह सभी तरीकों से दिखाना चाहिए, है ना? – fiftyplus