2017-07-27 3 views
0

Je dispose d'un service d'interrogation Windows pour envoyer un e-mail automatique toutes les 10 minutes. J'utilise Thread.Sleep(new TimeSpan(0, 10, 0)); pour dormir le fil pendant 10 minutes, ce qui est codé en dur en ce moment.C# Service Windows - Lecture à partir du fichier ini ou App.config

Pour éviter le codage dur, j'ai essayé App.config qui n'a pas réussi. Je veux déplacer le codage dur à certains fichiers .ini. Comment puis-je lire le fichier .ini de C# Windows Service.

EDIT: J'essaye le code ci-dessous pour lire de mon service de fenêtres. string pollingInterval = (string)new AppSettingsReader().GetValue("PollingInterval", typeof(string)); Donne l'erreur ci-dessous. Configuration system failed to initialize

+0

Copie possible de [Lecture/écriture d'un fichier INI] (https://stackoverflow.com/questions/217902/reading-writing-an-ini-file) –

+2

"J'ai essayé' App.config' qui n'était pas réussi." - pourquoi et comment a-t-il «échoué»? Ce serait généralement le moyen préféré de stocker des informations comme ça. Avez-vous lu https://stackoverflow.com/questions/13043530/what-is-app-config-in-c-net-how-to-use-it? – Corak

+1

Quel est le problème avec l'utilisation d'un App.config? Remarque: Votre tâche semble être simplement résolue en exécutant une application de console à partir de Windows Task Scheduler plutôt que d'exécuter un service Windows inactif. – Filburt

Répondre

1

L'utilisation App.config est aussi simple que

string interval = ConfigurationManager.AppSettings["interval"]; 

TimeSpan t; 
TimeSpan.TryParseExact(interval, @"h\:m\:s", CultureInfo.InvariantCulture, out t); 

(Ne pas oublier d'ajouter l'assemblage référence System.Configuration et using System.Configuration + System.Globalization)

Votre App.config:

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
     <add key="interval" value="00:10:00" /> 
    </appSettings> 
</configuration> 
2

app.config est une meilleure solution que le fichier INI.

Votre app.config fichier ressemble à quelque chose comme ci-dessous:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
....... 
    <appSettings> 
    <add key="TimerInterval" value="10" /> 
    </appSettings> 
....... 
</configuration> 

Et vous le lire comme:

int timerInterval = Convert.ToInt32(ConfigurationManager.AppSettings["TimerInterval"]); 

Vous devez namespace importer using System.Configuration; et ajouter une référence à dll System.Configuration.