La procédure suivante est lancée toutes les 10 secondes :
public MainWindow(){
InitializeComponent();
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 10);
dispatcherTimer.Start();
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
NbServers.Content = checkAlerte("System Down");
WpServer.Background = colorCheck(Convert.ToInt16(NbServers.Content));
NbBackup.Content = checkAlerte("Backup");
WpBackup.Background = colorCheck(Convert.ToInt16(NbBackup.Content));
NbAlerts.Content = checkAlerte("Alerts");
WpAlerts.Background = colorCheck(Convert.ToInt16(NbAlerts.Content));
etc... etc.. (une douzaine de tuiles)
private int checkAlerte(string alerteType){
ConnexionDB Mycon = new ConnexionDB();
int value = 0;
try{
Mycon.req = "Select count(computerName) from custom_TV_Alerts where description = '" + alerteType + "'";
Mycon.ExecuterDB();
while (Mycon.rdr.Read()){
value = Mycon.rdr.GetInt32(0);
}
Mycon.FermerDB();
}
catch{
}
return value;
}
//--le delegate te permettra d'appeler une fonction via l'invoke public delegate void parListInt(List<int> li); //--cette fonction mettra à jour les champs graphiques à partir de la liste d'entier public void setBackground(List<int> li) { if (this.InvokeRequired)//--SI on est dans un autre thread que le graphique, on doit faire l'invoke pour interargir avec la form { this.Invoke(new parListInt(setBackground),li);//--voilà l'utilité de l'invoke return ;//--du coup on fait un return de manière à ce que la suite ne soit pas executé. on peu tout aussi bien encadrer la suite dans un else à la place } //-- si on atteint ce code, on peu éditer la form if( li.Count() == 5) //--ici ca sera ton nombre de tuile { WpServer.Background = li[0]; . . . //--etc. pour toutes les tuiles } } //--ici notre thread qui va récupérer les valeurs public void th_getBackground(List<string> content) { List<int> li = new List<int>(); foreach(string s in content) { li.Add(colorCheck(Convert.ToInt16(s)); } setBackground(content); } //--il ne reste plus que la méthode appelante, qui est en fait dclenché par l évenement timer private void dispatcherTimer_Tick(object sender, EventArgs e) { //--on récupère les content pour notre thread List<string> lContent = new List<string>(); NbServers.Content = checkAlerte("System Down"); lContent.Add(NbServers.Content)) etc... etc.. (une douzaine de tuiles) //--et on déclenche le thread Thread t = new Thread(() => th_getBackground(lContent)); t.Start(); }
if( li.Count() == 5), il faudra bien sûr soit que tu indique le nombre de tuiles exacte, soit rien : tu vois ;)
using System.Threading;
this.Dispatcher.Invoke(new parListInt(setBackground),li);
public void setBackground()
{
this.Dispatcher.Invoke((Action)(() =>
{
NbServers.Content = checkAlerte("System Down");
NbBackup.Content = checkAlerte("Backup");
NbAlerts.Content = checkAlerte("Alerts");
NbLowDisk.Content = checkAlerte("Low Disk");
NbEvents.Content = checkAlerte("Events");
NbExchange.Content = checkAlerte("MSExchange");
NbDNS.Content = checkAlerte("DNS");
Nbinbox.Content = checkInbox();
NbVmx.Content = checkAlerte("Trilead VMX");
NbNetwork.Content = checkAlerte("Network");
NbPatch.Content = checkAlerte("Patch");
NbProcess.Content = checkAlerte("Process");
NbServices.Content = checkAlerte("Services");
}));
}
private void dispatcherTimer_Tick(object sender, EventArgs e)//(object sender, DoWorkEventArgs e)//object sender, EventArgs e)EventArgs ElapsedEventArgs
{
Thread t = new Thread(() => setBackground());
t.Start();
}
this.Dispatcher.Invoke((Action)(() => { NbServers.Content = checkAlerte("System Down"); NbBackup.Content = checkAlerte("Backup"); NbAlerts.Content = checkAlerte("Alerts"); NbLowDisk.Content = checkAlerte("Low Disk"); NbEvents.Content = checkAlerte("Events"); NbExchange.Content = checkAlerte("MSExchange"); NbDNS.Content = checkAlerte("DNS"); Nbinbox.Content = checkInbox(); NbVmx.Content = checkAlerte("Trilead VMX"); NbNetwork.Content = checkAlerte("Network"); NbPatch.Content = checkAlerte("Patch"); NbProcess.Content = checkAlerte("Process"); NbServices.Content = checkAlerte("Services"); }));
public void setBackground()
{
string content;
content = checkAlerte("System Down");
this.Dispatcher.Invoke((Action)(() =>
{
NbServers.Content = content;
}));
content = checkAlerte("Backup");
this.Dispatcher.Invoke((Action)(() =>
{
NbBackup.Content = content;
}));
content = checkAlerte("Alerts");
this.Dispatcher.Invoke((Action)(() =>
{
NbAlerts.Content = content;
}));
//etc.
//
}