IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

probleme thread sur bouton


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Par défaut probleme thread sur bouton
    Re bonjour,

    J'ai dans ma form un bouton pour se connecter a une BD Postgres.
    Dans l'évènement click du bouton, je fais appel a un nouveau thread qui lui meme fait appel à une méthode.

    Le problème c'est que ça bloque ma form le temps que la connexion se fasse.
    Pouvez-vous me dire ce que je fais de mal?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    private void nBtnConnect_Click(object sender, System.EventArgs e)
    		{
    			nWaitingBar.Properties.WaitSize = 12;
    			nWaitingBar.Properties.Step = 5;	
    			nWaitingBar.Properties.Text = "Connecting DB";
    			nWaitingBar.Visible = true;
    			nWaitingBar.BeginWait();
    			Thread mythread = new Thread(new ThreadStart(this.Connection));
    			mythread.IsBackground = true;
    			mythread.Start();
    		}
    		#region connect
    		private void Connection()
    		{
     
    			log("Connecting to PostgreSQL...");
     
    			// Setup the logging
    			NpgsqlEventLog.Level = LogLevel.Normal;
    			NpgsqlEventLog.LogName = "Log.log";
    			NpgsqlEventLog.EchoMessages = true;
     
    			if (cnDB != null)
    			{
    				if (cnDB.State != ConnectionState.Closed)
    				{
    					log("Error: Already connected!");
    					log("Finished connecting!\r\n"); 
    					return;
    				}
    			}
     
    			// Check the data
    			if (txtHostname.Text == "")
    			{
    				log("Error: No hostname was specified!");
    				log("Finished connecting!\r\n"); 
    				return;
    			}
    			if (txtPort.Text == "")
    			{
    				log("Error: No port was specified!");
    				log("Finished connecting!\r\n"); 
    				return;
    			}
    			if (txtUsername.Text == "")
    			{
    				log("Error: No username was specified!");
    				log("Finished connecting!\r\n"); 
    				return;
    			}
     
     
    			// Setup a connection string
    			string szConnect = "DATABASE=" + txtDatabase.Text + ";SERVER=" + txtHostname.Text + ";PORT=" + int.Parse(txtPort.Text) + ";UID=" + txtUsername.Text + ";PWD=" + txtPassword.Text + ";";
     
    			log("Connection String: " + szConnect);
     
    			// Attempt to open a connection
     
    				cnDB = new NpgsqlConnection(szConnect);
     
    			try 
    			{
    				cnDB.Open();
    			} 
    			catch(Exception ex)
    			{
    				log("Error: " + ex.Message + "\r\n" + "StackTrace: \r\n" + ex.StackTrace);
    				log("Finished connecting!\r\n"); 
    				return;
    			} 
     
    			// Get the PostgreSQL version number as proof
    			try
    			{
    				NpgsqlCommand cmdVer = new NpgsqlCommand("SELECT version()", cnDB);
    				Object ObjVer = cmdVer.ExecuteScalar();
    				log(ObjVer.ToString());
    			}
    			catch(Exception ex)
    			{
    				log("Error: " + ex.Message + "\r\n" + "StackTrace: \r\n" + ex.StackTrace);
    				log("Finished connecting!\r\n");
    				return;
    			} 
    			log("Finished connecting!\r\n"); 
    			sbEtat.Text= "Connecté";
    			nWaitingBar.EndWait();
    			nWaitingBar.Visible = false;

  2. #2
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Utilise un BackGroundWorker
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Par défaut
    Malheureusement je suis sous vs2003.
    Je pense que le backgroundworker est apparut avec le framework 2.0, non?

  4. #4
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par Greesize Voir le message
    Malheureusement je suis sous vs2003.
    Je pense que le backgroundworker est apparut avec le framework 2.0, non?
    Oui exact, dans ce cas là il faut utiliser les threads mais normalement, ce devrait pas bloquer ta form principale... (désolé je fais du vb.net donc pas facile pour moi de vérifier ton code)
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Par défaut
    Bah écoute tu auras essayé!
    Dejà c'est sympa de ta part...

    Mais avec le thread ça bloque!
    Mais il n'est pas exclu que j'aie encodé ça comme un âne.

    Si quelqu'un d'autre peux m'aider...

  6. #6
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mythread.IsBackground = true;
    Je ne le précise pas, essaye de supprimer cette ligne.

    Pour déclarer un thread, je fais :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim m as new thread(addressof Procedure)
    m.start 'demarre le thread
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

Discussions similaires

  1. Réponses: 14
    Dernier message: 20/08/2008, 17h11
  2. Probleme de liens sur bouton
    Par LaureD dans le forum Flash
    Réponses: 20
    Dernier message: 18/01/2007, 14h26
  3. [PHP-JS] probleme lien sur bouton
    Par jguep dans le forum Langage
    Réponses: 2
    Dernier message: 11/01/2007, 11h26
  4. [VBA excel] Probleme sur bouton commande
    Par RedBurn dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 22/11/2005, 10h10
  5. Probleme bizarre sur relief d'un bouton
    Par Kara dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 21/07/2005, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo