Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
950 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  "Expiration du délais d'attente" mais pourquoi ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

"Expiration du délais d'attente" mais pourquoi ?

n°1413289
Berceker U​nited
PSN : berceker_united
Posté le 25-07-2006 à 17:28:26  profilanswer
 

Bonjour.
J'ai fais un petit programme qui fais une opération lourde sur un Server de base de données dans mon cas. SQLServer 2000. Je finis mon truc mais voila que maintenant il m'annonce au bout d'une disaine de seconde le message suivant  
"Expiration du délai d'attente. Le délai d'attente s'est écoulé avant la fin de l'opération ou le serveur ne répond pas." et apparement c'est .Net SqlClient Data Provider qui lui a sortie cela. Ce que je ne comprend pas c'est que cette requete s'execute depuis d'autre application telle que php ou via l'analyseur de code. Certe l'opération dure 2h environs.  
Voici ma chaine de connexion  "Data Source=xxx.xxx.xxx.xxx;Initial Catalog=Chicom_;User Id=sa;Password=;"
Aurais-je raté quelque chose ou y a t'il une chose à savoir?
 
Ma methode permettant d'ecrire dans une table
 

Code :
  1. public int ExecuteWrite(string pRequete){
  2.             SqlCommand oCommand = new SqlCommand(pRequete,this.oConnection);       
  3.             return oCommand.ExecuteNonQuery();           
  4.         }


Message édité par Berceker United le 25-07-2006 à 17:32:04
mood
Publicité
Posté le 25-07-2006 à 17:28:26  profilanswer
 

n°1413293
Arjuna
Aircraft Ident.: F-MBSD
Posté le 25-07-2006 à 17:32:33  profilanswer
 

C'est au moment de la connection que ça déconne, ou au moment de l'execution ?
Si c'est l'execution qui plante, alors t'as bêtementun TimeOut.
 
dans ton objet sqlConnection, modifie la propriété de timeout.
idem dans ton objet sqlCommand.
et si t'as une transaction, toujours pareil.

n°1413301
Berceker U​nited
PSN : berceker_united
Posté le 25-07-2006 à 17:38:58  profilanswer
 

je l'ai repéré dans le SQLCommand que j'ai mis à zéro mais je ne savais pas qu'il pouvait y être dans le sqlConnection. Je te remercie :)

n°1413302
Arjuna
Aircraft Ident.: F-MBSD
Posté le 25-07-2006 à 17:41:37  profilanswer
 

ceci dit, 10 secondes, je trouve ça court quand même

n°1413313
Berceker U​nited
PSN : berceker_united
Posté le 25-07-2006 à 17:53:33  profilanswer
 

Maintenant il est placé à zéro et là j'ai les enregistrement.
Une autre question. Lorsqu'il y qu'un thread le programme est bloqué le temps de l'execution. Le progress bar aussi il est bloqué ?.

n°1413375
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 25-07-2006 à 20:18:50  profilanswer
 

Berceker United a écrit :

Maintenant il est placé à zéro et là j'ai les enregistrement.
Une autre question. Lorsqu'il y qu'un thread le programme est bloqué le temps de l'execution. Le progress bar aussi il est bloqué ?.


euh... rassure moi là : tu ne mets pas à jour le progressbar à partir d'un autre thread directement au moins ?


Message édité par Harkonnen le 25-07-2006 à 20:19:01

---------------
J'ai un string dans l'array (Paris Hilton)
n°1413392
Berceker U​nited
PSN : berceker_united
Posté le 25-07-2006 à 21:03:24  profilanswer
 

Ce que je voulais dire c'est que c'est pas un programme multi thread. Donc quand je lance le bouzin le programme reste figé mais je ne vois pas progressbar faire son travail pourtant je l'ai testé ailleurs et ça fonctionne.  
Je débute et je ne maitrise pas ça encore. C'est mon premier programme :/

n°1413396
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 25-07-2006 à 21:17:06  profilanswer
 

Il faut utiliser BeginInvoke() pour mettre à jour les controles. Les controles de Winforms ne sont pas thread safe, il est donc nécessaire de poster toute action que tu souhaites réaliser dessus dans une file d'attente.
BeginInvoke() prend en paramètre un delegate qui pointera vers la fonction dans laquelle tu mets à jour ta progressbar.  
 
http://www.codeproject.com/csharp/begininvoke.asp
 
edit: c'est marrant, le 1er paragraphe de cet article commence exactement comme ton dernier post [:ddr555]

Message cité 1 fois
Message édité par Harkonnen le 25-07-2006 à 21:17:38

---------------
J'ai un string dans l'array (Paris Hilton)
n°1413401
Berceker U​nited
PSN : berceker_united
Posté le 25-07-2006 à 21:37:37  profilanswer
 

Ha effectivement :D c'est qu'il y en qui pense à tous :D*
Bref en tous cas j'ai des choses à apprendre encore. But final Faire l'equivalent voir mieux de Flight simulator.
 

Spoiler :


Ben quoi  :o arrêté de penser en négatif. Laissez moi rêver   :whistle:  


Message édité par Berceker United le 25-07-2006 à 21:38:27
n°1413587
Arjuna
Aircraft Ident.: F-MBSD
Posté le 26-07-2006 à 09:41:08  profilanswer
 

Harkonnen a écrit :

BeginInvoke() prend en paramètre un delegate qui pointera vers la fonction dans laquelle tu mets à jour ta progressbar.  
 
http://www.codeproject.com/csharp/begininvoke.asp
 
edit: c'est marrant, le 1er paragraphe de cet article commence exactement comme ton dernier post [:ddr555]


Ca m'intéresse aussi ça tiens :)
 
Me suis arraché les cheveux toute la soirée hier là-dessus.
 
J'ai foutu des delegate partout, des threads dans tous les sens, recopié deux exemples de la doc C# et tout... pas moyen de mettre à jour ma progressbar.
Et vu que j'ai eu des pépins d'internet toute la soirée, j'ai fini par caller l'affaire :/
 
Vais regarder ça avec la plusgrande attention (en espérant que ça résolve enfin mon problème... là j'en suis à "je bloque sur le this.invoke()" <- le programme se met en pause et je sais pas pkoi :D)

mood
Publicité
Posté le 26-07-2006 à 09:41:08  profilanswer
 

n°1414111
MagicBuzz
Posté le 26-07-2006 à 20:46:33  profilanswer
 

petit up du topic, car le coup du invoke ne marche pas chez moi.
 
j'avais trouvé en première instance dans la msdn le même exemple que celui filé par harko. ça changeait RIEN.
 
j'ai ensuite modifié le truc selon un autre exemple de la msdn, sans effet... là ça restait carrément bloqué sur le Invoke()
 
le principe :
- lorsque je commence le "grabfiles", je vais lancer un traîtement long, qui consiste à vérifier dans un répertoire, fichier par fichier, que c'est bien une image.
- je lance donc ça dans un thread, qui doit entre autres, mettre à jour une progressbar disant où il en est.
- pendant ce temps, le thread principal doit attendre la fin du fils avant de continuer (et je pense que c'est ça qui coince)
 

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.IO;
  5. using System.Windows.Forms;
  6. using System.Threading;
  7. namespace WindowsApplication1
  8. {
  9.     public partial class Main : Form
  10.     {
  11.         string path;
  12.         public List<string> files = new List<string>();
  13.         string[] filesModel;
  14.         Random rnd = new Random();
  15.         bool canGrab = true;
  16.         System.Windows.Forms.Timer slideShow = new System.Windows.Forms.Timer();
  17.         public DirectoryInfo dir;
  18.         ProgressBar progress;
  19.        
  20.         public Main()
  21.         {
  22.             InitializeComponent();
  23.             Graphics g = this.CreateGraphics();
  24.             g.Clear(Color.Black);
  25.             g.Dispose();
  26.             this.path = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
  27.             this.slideShow.Interval = 1500;
  28.             this.slideShow.Tick += new EventHandler(slideShow_Tick);
  29.             this.GrabFiles();
  30.         }
  31.         private void Main_Click(object sender, EventArgs e)
  32.         {
  33.             if (slideShow.Enabled)
  34.             {
  35.                 slideShow.Stop();
  36.             }
  37.             FolderBrowserDialog openFoler = new FolderBrowserDialog();
  38.             openFoler.SelectedPath = this.path;
  39.             openFoler.ShowNewFolderButton = false;
  40.             if (openFoler.ShowDialog(this) == DialogResult.OK)
  41.             {
  42.                 this.path = openFoler.SelectedPath;
  43.             }
  44.             openFoler = null;
  45.             this.GrabFiles();
  46.         }
  47.         private void GrabFiles()
  48.         {
  49.             if (canGrab)
  50.             {
  51.                 this.canGrab = false;
  52.                 this.files.Clear();
  53.                 this.progress = new ProgressBar();
  54.                 this.dir = new DirectoryInfo(this.path);
  55.                 if (this.dir.GetFiles().Length > 0)
  56.                 {
  57.                     this.progress.Maximum = dir.GetFiles().Length;
  58.                     this.progress.Value = 0;
  59.                     this.progress.Width = this.Width / 4;
  60.                     this.progress.Location = new Point((this.Width - progress.Width) / 2, (this.Height - progress.Height) / 2);
  61.                     this.progress.Visible = true;
  62.                     this.Controls.Add(this.progress);
  63.                     Thread t = new Thread(new ThreadStart(myThreadFunction));
  64.                     t.Start();
  65. /*
  66. * while (t.ThreadState != ThreadState.Stopped)
  67.                     {
  68.                         Thread.Sleep(25);
  69.                         this.progress.Value = this.files.Count;
  70.                         this.progress.Update();
  71.                         this.Refresh();
  72.                     }
  73. */
  74.                     t.Join();
  75.                     t = null;
  76.                     this.Controls.Remove(this.progress);
  77.                     this.progress = null;
  78.                 }
  79.                 this.dir = null;
  80.                 this.filesModel = new string[this.files.Count];
  81.                 this.files.CopyTo(this.filesModel);
  82.                 this.canGrab = true;
  83.                 if (this.files.Count == 0)
  84.                 {
  85.                     MessageBox.Show("Impossible de lancer le slideshow : il n'y a pas d'image !" );
  86.                 }
  87.                 else
  88.                 {
  89.                     this.slideShow.Start();
  90.                 }
  91.             }
  92.             else
  93.             {
  94.                 MessageBox.Show("Une autre action est en cours..." );
  95.             }
  96.         }
  97.         private void slideShow_Tick(object sender, EventArgs e)
  98.         {
  99.             bool can = false;
  100.             int cpt = 0;
  101.             Image pict = null;
  102.             while (!can)
  103.             {
  104.                 int idx = rnd.Next(this.files.Count);
  105.                 try
  106.                 {
  107.                     pict = Bitmap.FromFile(this.files[idx]);
  108.                     can = true;
  109.                     cpt--;
  110.                 }
  111.                 catch { }
  112.                 if (this.files.Count > 1)
  113.                 {
  114.                     this.files.RemoveAt(idx);
  115.                 }
  116.                 else
  117.                 {
  118.                     foreach (string s in this.filesModel)
  119.                     {
  120.                         files.Add(s);
  121.                     }
  122.                     cpt = files.Count;
  123.                 }
  124.             }
  125.             int sizeX = pict.Width;
  126.             int sizeY = pict.Height;
  127.             if (pict.Width > this.Width)
  128.             {
  129.                 sizeX = this.Width;
  130.                 sizeY = (int)((float)pict.Height * ((float)this.Width / (float)pict.Width));
  131.             }
  132.             if (pict.Height > this.Height)
  133.             {
  134.                 sizeX = (int)((float)pict.Width * ((float)this.Height / (float)pict.Height));
  135.                 sizeY = this.Height;
  136.             }
  137.             if (sizeX < this.Width / 2 && sizeY < this.Height / 2)
  138.             {
  139.                 sizeX *= 2;
  140.                 sizeY *= 2;
  141.             }
  142.             Size size = new Size(sizeX, sizeY);
  143.             Point pos = new Point((this.Width == size.Width) ? 0 : rnd.Next(this.Width - size.Width), (this.Height == size.Height) ? 0 : rnd.Next(this.Height - size.Height));
  144.             Rectangle dest = new Rectangle(pos, size);
  145.             Graphics g = this.CreateGraphics();
  146.             g.DrawImage(pict, dest);
  147.             g.Dispose();
  148.             pict = null;
  149.             GC.Collect();
  150.         }
  151.         private void myThreadFunction()
  152.         {
  153.             ThreadClass myThreadObject = new ThreadClass(this);
  154.             myThreadObject.getFiles();
  155.         }
  156.     }
  157.     public class ThreadClass
  158.     {
  159.         Main myFormControl;
  160.         public ThreadClass(Main myForm)
  161.         {
  162.             this.myFormControl = myForm;
  163.         }
  164.         public void getFiles()
  165.         {
  166.             Image img = null;
  167.             foreach (FileInfo fil in myFormControl.dir.GetFiles())
  168.             {
  169.                 try
  170.                 {
  171.                     img = Image.FromFile(fil.FullName);
  172.                     img.Dispose();
  173.                     myFormControl.files.Add(fil.FullName);
  174.                     GC.Collect();
  175.                 }
  176.                 catch { }
  177.             }
  178.             img = null;
  179.         }
  180.     }
  181. }


 
=> le code est "tel quel". il tourne, mais y'a carrément plus de gestion de la progressbar... j'ai shooté tout ce qui ressemblait aux appels à une delegate.

n°1414112
MagicBuzz
Posté le 26-07-2006 à 20:46:48  profilanswer
 

ps: désolé, c'est un peu carrément le bordel...
 
en commentaires, c'est la dernière tentative que j'ai fait : le thread principal qui tente de mettre à jour la progressbar pendant que le fils tourne... toujours sans effest (mise à part tout ralentir)


Message édité par MagicBuzz le 26-07-2006 à 20:48:14

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  "Expiration du délais d'attente" mais pourquoi ?

 

Sujets relatifs
expiration de sessiondonner un temps d attente a n importe quelle cmd dos
Desactiver les avertissements d'expiration lors d'un retourAfficher un "voile d'attente" lors du clic sur un certain lien
L attente processusDelais d'action d'un 'setVariable' de Javascript vers Flash
Page d'attente...Faire une attente entre 2 affichage d'image
!i! RESOLU !i! fonction exec() attente fin du progAttente de pression d'une touche + savoir quelle touche à été pressée
Plus de sujets relatifs à : "Expiration du délais d'attente" mais pourquoi ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR