2010-12-07 24 views
0

Lorsque j'essaie de définir l'événement tick de ma minuterie et que j'utilise la méthode, j'obtiens cette erreur. Qu'est-ce qui ne va pas ici?Minuteur C# - Obtention de l'erreur «Nom de la méthode attendue»

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Timers; 

namespace QueueSimulation 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public void Form1_Load(object sender, EventArgs e) 
     { 
     } 

     public void goButton_Click(object sender, EventArgs e) 
     { 
      ProcessCustomers CustomerQueue = new ProcessCustomers(); // create the CustomerQueue 

      System.Windows.Forms.Timer queueTimer = new System.Windows.Forms.Timer(); 
      queueTimer.Interval = Convert.ToInt32(customerArriveChooser.Value*1000); 
      queueTimer.Tick += new ElapsedEventHandler(CustomerQueue.Arrive()); 

      CustomerQueue.Arrive(); 
     } 

     private void stopButton_Click(object sender, EventArgs e) 
     { 
      // put code here to break out of the program 
     } 
    } 

    public class Customer 
    { 
     int timeInQueue; 
    } 

    public class ProcessCustomers 
    { 
     public void Arrive(){} 

     public void Leave(){} 
    } 

    public class Server 
    { 
     bool servingStatus = false; // true for serving, false for not serving 
    } 

    public class Queue 
    { 
     Customer[] queue = new Customer[49]; // initialise a queue (array) capable of holding 50 customers 
    } 
} 

Répondre

1

Je suppose que vous voulez dire utiliser la méthode nom, appelez pas et utiliser la valeur de retour:

queueTimer.Tick += new EventHandler(CustomerQueue.Arrive); 

Puisque la valeur de retour de Arrive n'est pas un type de délégué, vous pouvez » t l'utilise.

Notez que la signature du gestionnaire d'événements doit correspondre à la signature du délégué - dans le cas de Tick, il est EventHandler:

public delegate void EventHandler(
    Object sender, 
    EventArgs e 
) 

Ainsi, votre méthode Arrive doit prendre ces deux paramètres:

public void Arrive(Object sender, EventArgs e){} 
+0

Mais je n'obtiens pas de surcharge « Arrive » correspond délégué « System.Timers.ElapsedEventHandler » –

+0

@ Alex - parce qu'il ne possède pas les bons paramètres pour un ' Tick' gestionnaire d'événements. Voir ma réponse mise à jour. – Oded

+0

Maintenant, je reçois "Pas de surcharge pour 'Arrive' correspond à 'System.Timers.ElapsedEventHandler'" –

0

ElapsedEventHandler est le handle pour System.Timer pas pour System.Windows.Forms.Timer

l'événement doit ressembler à ceci:

queueTimer.Tick += new ElapsedEventHandler(queueTimer_Tick); 


void queueTimer_Tick(object sender, EventArgs e) 
{ 
    CustomerQueue.Arrive(); 
}
+0

Il suffit de modifier System.Windows.Forms.Timer queueTimer = new System.Windows.Forms .Minuteur(); à System.Timers.Timer queueTimer = new System.Timers.Timer(); – Wowa