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.
//
}
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.