2016-05-09 1 views
0

J'écris (ou j'ajoute plus spécifiquement) dans un fichier dll pour pouvoir appeler une fonction toutes les secondes, la fonction sera d'envoyer des données dans un fichier qui peut ensuite être lu par un autre programme. Le problème que j'ai est que je n'ai pas été capable de trouver des systèmes de chronométrage qui n'impliquent pas un formulaire ou une application console, je veux juste que cela se produise dans le sans interface graphique, (ou toute interface utilisateur du tout!) J'ai examiné system.timers.timer mais forme ce que je peux dire qui a besoin d'une console et. Est-ce possible? et si oui, comment? Merci à l'avance :-)Répétition d'une paire par seconde dans une DLL (C#)

+1

Comment les fonctions représentées dans cette bibliothèque vont-elles être activées? Cette DLL sera-t-elle utilisée dans un exécutable exécuté manuellement ou programmé dans le cadre d'un service hébergé dans un planificateur tel que Windows Services ou similaire? –

+2

Pourquoi pensez-vous que System.Timers.Timer (https://msdn.microsoft.com/en-us/bibliothèque/393k7sb1% 28v = vs.110% 29.aspx) nécessite une console? – BadZen

+0

J'utilise un lecteur de musique appelé MusicBee qui permet les plugins DLL, le fichier DLL a des parties: une qui récupère les données de l'API MusicBee et une pour un serveur (pour que je puisse voir les données sur une page web). doit être géré en interne car les indicateurs d'activation inclus dans l'API ne font pas ce dont j'ai besoin. Je pensais utiliser une boucle infinie avec un appel de sommeil de 500 là-bas. Cela fonctionnerait-il? –

Répondre

0

Il n'y a pas besoin d'une interface graphique si cela est simplement destiné à être une application de fond. Tout dépend de la façon dont il est hébergé (voir mon commentaire sur votre message original sur exe calme vs service).

Voici un tutoriel de base qui peuvent être utiles: http://www.dotnetperls.com/timer

Notez également cette question précédente, ce qui est très similaire: How to call a particular method every some seconds in c#?

Comme Dmitriy a également suggéré pendant que je tapais, je vous conseille d'exécuter cette sur un fil de fond car il semble qu'il y ait un traitement nécessaire pour générer le fichier. Votre code principal devrait simplement établir le programme, puis lancer un nouveau thread pour faire le travail chaque seconde (1000 millisecondes).

Informations sur cette classe est ici: https://msdn.microsoft.com/en-us/library/system.threading.timer(v=vs.110).aspx

La page MSDN contient un exemple solide de la façon d'utiliser la classe. Dans l'exemple, une méthode appelée StatusChecker.CheckStatus effectue le travail en arrière-plan. Cette fonction est définie par la ligne:

TimerCallback tcb = statusChecker.CheckStatus; 

La ligne deux après que l'on démarre le chronomètre et indique que la fonction de rappel devrait être soulevée après 1 seconde et chaque 1/4 seconde après que:

Timer stateTimer = new Timer(tcb, autoEvent, 1000, 250); 

Avec la documentation fournie ici et cet exemple, vous devriez être en mesure de déterminer comment effectuer les modifications nécessaires.

+0

Merci beaucoup :-) Je ne voulais pas utiliser une interface graphique de toute façon, donc c'est parfait. Ce lien de microsoft semble vraiment utile, je vais regarder, merci :-) –

0

Que va charger cette DLL - si un service Windows; vous pouvez lancer un objet timer dans l'événement service.start; puis placez votre fonction récurrente dans timer.event. Voici un code pseudo pour vous aider à démarrer avec:

Declare ce dans le monde:

System.Timers.Timer tmrMain = new System.Timers.Timer(); 

Puis dans la fonction principale() définir un intervalle - fréquence à laquelle vous voulez que vos fonctions à appeler:

tmrMain.Interval = 20000; //in milliseconds 
tmrMain.Start(); 

Et vous devez également déclarer un gestionnaire d'événements:

private void tmrMain_Tick(object sender, System.Timers.ElapsedEventArgs e) 
{ 
//Your call to do something, every time this gets triggered at value specified in tmrMain.Interval 
} 

Hope this il lps.

+0

Merci :-) J'utilise un lecteur multimédia appelé MusicBee et vous pouvez y ajouter des plugins DLL, donc je suppose que ce serait MusicBee lance la DLL. Je pensais le mettre dans une boucle infinie avec un appel de sommeil pour le casser, pensez-vous que cela fonctionnerait? –