Thread

liliemumue Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 6 mars 2008 - 14 févr. 2005 à 19:46
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 - 15 févr. 2005 à 09:37
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

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
14 févr. 2005 à 20:39
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
0
liliemumue Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 6 mars 2008
14 févr. 2005 à 21:20
Parce que ca marche pas très bien c touours aussi long
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
15 févr. 2005 à 09:37
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
0
Rejoignez-nous