begin process at 2010 02 10 01:45:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

.NET

 > 

[C#] Visual 2005 Beta 1 & Thread safe operation


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C#] Visual 2005 Beta 1 & Thread safe operation

mardi 9 novembre 2004 à 02:56:28 | [C#] Visual 2005 Beta 1 & Thread safe operation

scoubidou944

Actuellement en train de tester la compatiblité de mes appli sur .NET 2005, je rencontre un petit problème d'accès entre threads et dont je ne sais pas si cela vient plus du codage que du type d'accès.

En gros, G un thread principal (cad celui de mon appli qui contient une RichTextBox. Maintenant, j'ai un autre thread qui mouiline dans un coin et qui doit rajouter du text dans l'edit.

Si je met le code dans le 2nd thread, meme le fait de lire la longueur du texte de la RichEdit me fait peter une Exception de type operation entre thread blah blah.

Quelle est donc la meilleure solution ?

----------------------------
C++ forever
C# amateur
mardi 9 novembre 2004 à 12:13:12 | Re : [C#] Visual 2005 Beta 1 & Thread safe operation

ousta

Bonjour je connais pas ton code mais peut etre que tes threads accedent en meme temps a une meme variable, essaye peut etre avec lock().
mercredi 10 novembre 2004 à 01:21:56 | Re : [C#] Visual 2005 Beta 1 & Thread safe operation

scoubidou944

Le lock() ne change rien sur .NET 2005

voici le code :

using System;
using System.Threading;
using System.Windows.Forms;

namespace QuickSample
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private RichTextBox richTextBox1;
private System.Threading.Thread myEngineThread;
private System.ComponentModel.IContainer m_components = null;

public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

// TODO: Add any constructor code after InitializeComponent call
WriteToOutput(richTextBox1, "Main Thread : line 0");

//myEngineThread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(this.Runtime));
myEngineThread = new System.Threading.Thread (new ThreadStart(this.Runtime));
this.myEngineThread.Start();

}

public void WriteToOutput(RichTextBox _oDst, string _szText)
{
_oDst.AppendText(_szText);
}

static readonly object countLock = new object();
private void Runtime()
{
// Illegal cross thread operation
lock (countLock)
{
richTextBox1.AppendText("toto");
}
//
// OU
//
// Parameter count mismatch
//this.richTextBox1.Invoke(new PresentHandler(this.DoPresentOnMainThread));
}

private delegate void PresentHandler(RichTextBox _oDst, string _szText);
private void DoPresentOnMainThread(RichTextBox _oDst, string _szText)
{
_oDst.AppendText(_szText);
}


/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (m_components != null)
{
m_components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(28, 37);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(206, 176);
this.richTextBox1.TabIndex = 0;
this.richTextBox1.Text = "";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.richTextBox1);
this.Name = "Form1";
this.Text = "MyDialog";
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
}
}
vendredi 12 novembre 2004 à 20:09:28 | Re : [C#] Visual 2005 Beta 1 & Thread safe operation

Xya

Réponse acceptée !
[font=Tahoma]
Je crois que tu oublies de passer tes arguments à DoPresentOnMainThread:
[/font]

private void Runtime()
{
this.richTextBox1.Invoke(new PresentHandler(this.DoPresentOnMainThread));
}


[font=Tahoma]
devrait être:
[/font]


private void Runtime()
{
object[] args = new object[] {this.richTextBox1, "Main Thread : line 0" };
this.richTextBox1.Invoke(new PresentHandler(this.DoPresentOnMainThread), args);
}

mardi 16 novembre 2004 à 00:35:56 | Re : [C#] Visual 2005 Beta 1 & Thread safe operation

scoubidou944

rien changé :-(

----------------------------
C++ forever
C# amateur
mardi 16 novembre 2004 à 13:41:30 | Re : [C#] Visual 2005 Beta 1 & Thread safe operation

Xya

Tu as toujours l'exception TargetParameterCountException? Parce qu'avec les modifications que j'ai faites ton code tourne sans problème.
mardi 16 novembre 2004 à 23:18:08 | Re : [C#] Visual 2005 Beta 1 & Thread safe operation

scoubidou944

Heu vi ca marche mais faut pas mettre de Break Point sur le Invoke, c'est ca qui fait bacher.
Mais pk cela ? alors la aucune idee

----------------------------
C++ forever
C# amateur
mercredi 17 novembre 2004 à 13:25:04 | Re : [C#] Visual 2005 Beta 1 & Thread safe operation

Xya

Je crois que c'est un bug de VS Beta 1, si tu poses un breakpoint sur Invoke et que tu avance à la ligne suivant ca passe, mais si tu inspecte un contrôle de ta feuille (comme ici richTextBox1), il va appeller ToString du contrôle, ce qui va lancer une exception de synchronisation que tu te récupère après l'appel à Invoke.
Je l'ai posté dans le MSDN Feedback Center.
jeudi 27 janvier 2005 à 15:23:54 | Re : [C#] Visual 2005 Beta 1 & Thread safe operation

xmo

Salut,
Est ce que ton souci d'acces entre threads a été résolu.
J'ai eu à un moment un souci similaire que j'ai resolu.
exemple de code:

//Dans vs2005 pour pas avoir le message d’erreur « Illegal cross thread operation »

 

/* Dans le Thread principal */

//Declaration du contrôle

PictureBox grWatch = new PictureBox() ;

//initialisations des proprietes du contrôle

 

//Propriete du UserControl qui donne l’acces à Picture.Graphics

private Graphics WatchGraphics

{

get { return (Graphics)Invoke(new GetWatchGraphicsDelegate(GetWatchGraphics)); }

}

//Delegate et sa fonction associée

//Ils permettent d’acceder au menbres d’un contrôle à partir d’un thread qui ne l’a pas créer

private delegate Graphics GetWatchGraphicsDelegate();

private Graphics  GetWatchGraphics()

{

            return grWatch.CreateGraphics();

}

 

/* Dans le Thread du timer */

//Au moment de l’acces

bg = bgc.Allocate( WatchGraphics , new Rectangle(0, 0, WatchGraphicsWidth, WatchGraphicsHeight));


mox@hotmail.fr
mercredi 8 novembre 2006 à 11:59:13 | Re : [C#] Visual 2005 Beta 1 & Thread safe operation

olecossois

Y'a mieux, mais avec beaucoup moins de sécurité pour le problème Illegal Cross Threading

Ajouté ça dans le Load : Control.CheckForIllegalCrossThreadCalls=false

Ca enlève la securité sur le frameword 2.0

Bien cordialement

Olivier

1 2

Cette discussion est classée dans : visual, thread, safe, operation, beta


Répondre à ce message

Sujets en rapport avec ce message

Visual studio 2005 beta [ par RMI ] Bonjour, Je voudrai savoir si l'installation de Visual Studio 2005 beta ne génère pas d'interférences avec VS2003. Merci.Théo Visual Source Safe [ par leblate63 ] bonjour, je développe actuellement une application en C# pour générer un document excel à partir d'une base VisualSourceSafe. Le document regroupe et [C#] Visual 2003 -> Visual 2005 [ par scoubidou944 ] Je suis en train de testerl a version 2005 de Visual .NET Whidbey.Alors, premier prog à lancer et ca plante :( dans mon splash screen.En gros j'ai un [C# 2.0] Problemes de thread [ par MorpionMx ] Bonjour a tous. Je suis en train de faire une classe qui fourni une connexion a une base de données pour mon application, et qui lui permet aussi de vs.net beta 2 pour le 25 avril [ par Fildomen ] YaoYaoet voila, microsoft pousse toujours la date du visual studio 2005 beta 2 , mais mtna, je pense que c un peu fixe, ca sera bien pour le 25 avril, [C#] Visual Studio .net [ par bibicool ] Bonjour,J'utilise Visual Studio .net pour développer en C#,J'utilise pour rendre mon code plus facile à lire, les "balises" #region.... #endregionIl y Changement du code généré par le disigner [ par Fildomen ] Sltpour convertir mes progs beta 1 vers la beta 2 , j'ai du faire des changement dans tt le code, et ca même dans le code généré automatiquement par l [Visual C#] Chemin d'accès des références en relatif [ par nitrique ] Bonjour @ tous,Dans mon projet, j'ai ajouté une référence com (MSCommLib) avec l'assistant.Il me l'a ajouté dans: "références", il m'a copié à la raci Terminé un thread [ par Bidou ] Bonjour, petite question aux spécialistes des Threads.J'ai fait, juste pour essayer, un server avec des clients qui s'y connecte. Le client qui se con pb avec Visual C# 2005 Express béta 2 [ par wizad ] Bonjour, Voila j'utilise depuis quelque temps VC# 2005 Express béta 1 qui est trés bien. J'ai voulu passer sur la béta 2 fraichement sortit et on dira


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,092 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales