2012-01-24 10 views
-1

私はシリアルIOポートのデータ受信したイベントを書いていますとイベントハンドラのエラーが...次は、ラインコードのC#、シリアルポート

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(ComPort.DataReceived);

私を見せている。 1.無効な式の用語「プライベート」 2.修飾子「静的」 3.私はここでCOMポートを使用する必要があり、この用語には有効ではありませんか?またはちょうどDataReceived ...その関数名から

あなたの返事をありがとう。出宣言を移動し、

var SerialDataReceivedEventHandler1 = 
        new SerialDataReceivedEventHandler(ComPort.DataReceived); 

いますが、それはプログラムのクラスのメンバーになりたいしている場合: - - :

+0

アクセス修飾子を宣言する時期と方法、アクセス可能な/公開されていないことを判断する上で参考になる良いサイトです。 http://msdn.microsoft.com/en-us/library/wxh6fsc7%28v=vs.71%29.aspx – MethodMan

答えて

1

はちょうど行く、プライベート静的を必要といけない

public class Program 
     { 

     private static SerialDataReceivedEventHandler; 

その後、あなたはメインで必要です

SerialDataReceivedEventHandler1 = 
         new SerialDataReceivedEventHandler(ComPort.DataReceived); 

しかし、 "プログラム"は本当にtではないので、実際にあなた自身のクラスを始めたいと思うでしょう彼は最高の場所に....そして静的なクラスと静的メソッドを扱うのはちょっと面倒です

0

privateタイプのメンバーのアクセス可能性を制御するために使用されます。メソッドの一部である変数には適用できません。メソッド自体にすでにアクセスしやすいからです。

また、静的修飾子も有効ではありません。また、メンバーがインスタンスを認識しているかどうかを示す型のメンバーにも適用されます。

あなたのライン:

private static SerialDataReceivedEventHandler SerialDataReceivedEventHandler1 = 
       new SerialDataReceivedEventHandler(ComPort.DataReceived); 

は次のようになります。

SerialDataReceivedEventHandler SerialDataReceivedEventHandler1 = 
       new SerialDataReceivedEventHandler(ComPort.DataReceived); 

はしかし、その行は、最初の場所で完全に不要と思われます。あなたはそれを簡略化することができます:

myComPort.DataReceived += ComPort.DataReceived; 
0

その行はメインメソッドの内側です。プライベートとスタティックはメソッドの外部でのみ許可されます。

1

privateおよびstaticは、方法の範囲内では有効ではない。 あなたが唯一のクラスレベルで静的な項目を宣言することができます - つまり、ここで:

public class Program 
{ 
    private static object _memberField; 

    private static void MemberMethod() 
    { 
    // not here: 
    // private static object _insideMethod; // <- will not work 
    } 
} 
0

プライベート修飾子は、あなたのクラス定義のメンバ(メンバ変数/メソッド)に適用されます。 SerialDataReceivedEventHandlerは、メソッド内にある変数です。

関連する問題