2009-10-28 16 views
15

कोड के निम्नलिखित खंड में समस्या आ रही है। मुझे पैरामीटर गिनती मिल रही है।पैरामीटर गणना मिस्चैच

मुझे कई धागे और असुरक्षित अपडेटों की समस्याओं के कारण इसे लिखना पड़ा।


 delegate void data_INPUTDelegate(object sender, System.IO.Ports.SerialDataReceivedEventArgs e); 
    private void data_INPUT(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
    { 
     string data = serialPort.ReadLine(); 

     string[] tokens = data.Split(':'); 
     if (tokens[0] == "$SENSOR") 
     { 
      if (label_sensorValue.InvokeRequired) 
      { 
       data_INPUTDelegate del = new data_INPUTDelegate(data_INPUT); 
       label_sensorValue.Invoke(del,new object[] {tokens[1]}); 
      } 
      else 
      { 
       label_sensorValue.Text = tokens[1]; 
      } 
     } 
    } 
+0

(सी # डिबगर के अनुसार) त्रुटि लाइन की वजह से किया जा रहा है ]}); – BSchlinker

उत्तर

16

मैं त्रुटि इस लाइन से आता है लगता है:

label_sensorValue.Invoke(del,new object[] {tokens[1]}); 

आप डेल (tokens[1]) करने के लिए केवल एक पैरामीटर पारित लेकिन यह दो पैरामीटर (प्रेषक और ई)

है संपादित करें: ध्यान से अपना कोड पढ़ने के बाद, मेरा सुझाव है कि आप label_sensorValue के मान को सेट करने के लिए SetSensorValue विधि बनाएं। अभी आप गलत पैरामीटर के साथ ईवेंट हैंडलर को आमंत्रित करने का प्रयास कर रहे हैं।

private void data_INPUT(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
{ 
    string data = serialPort.ReadLine(); 

    string[] tokens = data.Split(':'); 
    if (tokens[0] == "$SENSOR") 
    { 
     SetSensorValue(tokens[1]); 
    } 
} 

delegate void SetSensorValueDelegate(string value); 

private void SetSensorValue(string value) 
{ 
    if (label_sensorValue.InvokeRequired) 
    { 
     SetSensorValueDelegate del = new SetSensorValueDelegate(SetSensorValue); 
     label_sensorValue.Invoke(del, new object[] {value}); 
    } 
    else 
    { 
     label_sensorValue.Text = value; 
    } 
} 
4

आपकी समस्या यह है कि आप केवल एक पैरामीटर के साथ दो पैरामीटर प्रतिनिधि को कॉल कर रहे हैं।

निम्न पंक्ति

label_sensorValue.Invoke(del,new object[] {tokens[1]}); 

पैरामीटर tokens[1] साथ यूआई धागे पर प्रतिनिधि invokes।

चूंकि प्रतिनिधि को दो मानकों की आवश्यकता होती है, यह असफल हो रही है। इसके अलावा, प्रतिनिधि को object और एक SerialDataReceivedEventArgs की अपेक्षा है, एक स्ट्रिंग नहीं।

इसे ठीक करने के लिए, आपको प्रतिनिधि के बजाय एक अनाम विधि का आह्वान करना चाहिए।

उदाहरण के लिए (सी में # 3): label_sensorValue.Invoke (डेल, नई वस्तु [] {टोकन [1:

label_sensorValue.Invoke(new Action(() => label_sensorValue.Text = tokens[1])); 
संबंधित मुद्दे