Paramètre Nombre Incompatibilité
De la difficulté avec le segment de code suivant. Je suis un paramètre nombre incompatibilité.
J'ai eu à écrire ce en raison de problèmes avec plusieurs threads dangereux et les mises à jour.
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];
}
}
}
L'erreur (selon le C# débogueur) est causé par la ligne: label_sensorValue.Invoke(del,new object[] {jetons[1]});
OriginalL'auteur BSchlinker | 2009-10-28
Vous devez vous connecter pour publier un commentaire.
Je suppose que l'erreur vient de cette ligne:
Vous passer un seul paramètre à del (
tokens[1]
), mais il dispose de deux paramètres (expéditeur et e)EDIT: après avoir lu attentivement votre code, je vous suggère de créer un
SetSensorValue
méthode pour définir la valeur delabel_sensorValue
. Maintenant que vous essayez d'appeler le gestionnaire d'événement avec de mauvais paramètres.OriginalL'auteur ybo
Votre problème est que vous êtes à l'appel d'une à deux paramètres de délégué avec un seul paramètre.
La ligne suivante
appelle le délégué sur le thread de l'INTERFACE utilisateur avec le paramètre
tokens[1]
.Depuis le délégué requiert deux paramètres, c'est un échec. En outre, le délégué s'attend à une
object
et unSerialDataReceivedEventArgs
, pas une chaîne de caractères.Pour résoudre ce problème, vous devez appeler une méthode anonyme au lieu de la déléguer.
Par exemple (en C# 3):
OriginalL'auteur SLaks