Thread

Signaler
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
6 mars 2008
-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
Bonjour


Je ne sais pas comment utiliser les thread:


Je voudrai tester ma connexion sql Server


Si sqlCoinnection.Open() ne repond pas alors je retourne false sinon je retourne true.


Seulement si elle repond pas elle met beaucoup de temps.


Alors je voudrai mettre un thread qui attend 10 secondes si la connexion ne s'ouvre pas au bout de 10 s alors je tue ma thread et je reoturn true.


Pouvez vous m'aidez svp


C urgent.


Merci

3 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Plutot que d'utiliser un thread qui attend pour toi, pourquoi tu fixes
pas la valeur du timeout dans la chaine de connexion ? Il me semble que
c'est faisable.

Mx
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
6 mars 2008

Parce que ca marche pas très bien c touours aussi long
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Voila un petit exemple d'utilisation avec un Thread.
J'ai mis toute la partie connexion dans une classe a part, et j'utilise un singleton pour acceder a ses objets
Plus utilisation d'un coupe Délégué / Event pour prévenir la classe principale de si la connexion est ouverte ou non.
Ca marche dans le principe, par contre je sais pas si c'est "conceptuellement correct", j'ai encore beaucoup a apprendre.


using
System;
using System.Data;
using System.Data.SqlClient;
using System.Threading;

namespace Essai
{
class MainClass
{
public Database db;

[STAThread]
public static void Main(string[] args)
{
MainClass c1 = new MainClass();

}

public MainClass()
{
db = Database.Instance;
db.ReceivedMessage += new Essai.Database.EventReceivedMessage(db_ReceivedMessage);

Console.ReadLine();
}

private void db_ReceivedMessage(bool connectionState)
{
switch(connectionState)
{
case true:
Console.WriteLine("Message du Thread principal : Le connexion est ouverte");
break;
case false:
Console.WriteLine("Message du Thread principal : Erreur lors de la connexion");
break;
}
}
}

public class Database
{

public static Database Instance = new Database();

public delegate void EventReceivedMessage(bool connectionState);
public event EventReceivedMessage ReceivedMessage;

private Thread connexThread;
private string connectionString = "Server=Serveur;Database=db;UID=SA;PWD=pass;Connect Timeout = 5";
private SqlConnection connex;

public SqlConnection Connex
{
get { return connex; }
}

public Database()
{
connex = new SqlConnection(connectionString);
connexThread = new Thread(new ThreadStart(Connect));
connexThread.Start();
}

public void Connect()
{
Console.WriteLine("Connexion a la bdd");
try
{
connex.Open();
ReceivedMessage(true);
}
catch(ThreadAbortException){}
catch(SqlException)
{
Console.WriteLine("Message du Thread annexe : le serveur ne repond pas");
ReceivedMessage(false);
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
connexThread.Abort();
}
}

}
}

Mx