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

Delphi .NET Discussion :

"STAThreadAttribute est obligatoire"


Sujet :

Delphi .NET

  1. #1
    Membre actif
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Points : 210
    Points
    210
    Par défaut "STAThreadAttribute est obligatoire"
    Bonjour,

    J'ai cette erreur qui se lève : "System.Exception: Modèle de thread incorrect (STAThreadAttribute est obligatoire)" suite à l'appel de la méthode LoadFromStream de TCustomClientDataSet.

    Une petite recherche Google et je trouve qu'il faut rajouter [STAThread] juste avant le begin du fichier .dpr.
    Ce que j'ai fait.

    Seulement, l'erreur est toujours là.

    Je suis dans une application ASP.NET. Le même code fonctionne dans une application Delphi .NET autonome (et me donne la même erreur si j'oublie de mettre l'attribut [STAThread]).

    Où doit-on mettre ce [STAThread] pour qu'il soit pris en compte dans une application ASP.NET ?


    D'avance, merci
    Arnaud D.
    --
    Arnaud DANEELS

  2. #2
    Membre actif
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Points : 210
    Points
    210
    Par défaut
    Je commence à me demander si c'est bien l'attribut [STAThread] qui est à indiquer quelquepart où s'il faut autre chose.

    Si ça peut vous aider, voici l'ensemble de la page d'erreur que j'obtiens :
    Modèle de thread incorrect (STAThreadAttribute est obligatoire)
    Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    Détails de l'exception: System.Exception: Modèle de thread incorrect (STAThreadAttribute est obligatoire)

    Erreur source:

    Ligne 125 : CtSession:= TCTSessionVM.Create;
    Ligne 126 : try
    Ligne 127 : logged:= CtSession.LogIn(txbxIdentifiant.Text, txbxPassword.Text);
    Ligne 128 : Session['LOGGED']:= logged.ToString;
    Ligne 129 : if logged then begin

    Fichier source : D:\Default.pas Ligne : 127

    Trace de la pile:

    [Exception: Modèle de thread incorrect (STAThreadAttribute est obligatoire)]
    Borland.Vcl.Units.SysUtils.CheckThreadingModel(ApartmentState Model)
    Borland.Vcl.Units.DSIntf.CreateDbClientObject(Guid CLSID, Guid IID, Object& Obj) // crée un Thread STA afin de créer l'objet
    Borland.Vcl.TCustomClientDataSet.CreateDSBase()
    Borland.Vcl.TCustomClientDataSet.OpenCursor(Boolean InfoQuery)
    Borland.Vcl.TDataSet.SetActive(Boolean Value)
    Borland.Vcl.TDataSet.set_Active(Boolean Value)
    Borland.Vcl.TDataSet.Open()
    Borland.Vcl.TCustomClientDataSet.LoadFromStream(TStream Stream)
    // en-dessous : des appels faits dans mon code
    U_Util.Units.U_Util.CompByteArrayToCds(Byte[] inArray, TClientDataSet& outCds) in LIB\U_Util.pas:60
    CTSessionVM.TCTSessionVM.LoadProjectFromVMS() in LIB\CTSessionVM.pas:73
    CTSessionVM.TCTSessionVM.LogIn(String username, String password) in LIB\CTSessionVM.pas:86
    Default.TWebForm2.btConnect_Click(Object sender, EventArgs e) in D:\VMI Energie\Default.pas:127
    System.Web.UI.WebControls.Button.OnClick(EventArgs e)
    System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
    System.Web.UI.Page.ProcessRequestMain()



    --------------------------------------------------------------------------------
    Informations sur la version : Version Microsoft .NET Framework :1.1.4322.2032; Version ASP.NET :1.1.4322.2032
    --
    Arnaud DANEELS

  3. #3
    Membre actif
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Points : 210
    Points
    210
    Par défaut
    A priori, il s'agit de ce bug de Borland : http://qc.borland.com/wc/qcmain.aspx?d=33679
    Corrigé pour la prochaine version.

    Cette correction n'est pas dispo (en tout cas, je ne l'ai pas trouvée) pour Delphi 2005.

    A ceux qui rencontre le même problème :

    Si vous souhaitez absolument résoudre ce problème au lieu de passer par un autre moyen, allez modifier le fichier borland.vcl.dsintf.pas, commentez la ligne CheckThreadingModel de la méthode CreateDbClientObject(Guid CLSID, Guid IID, Object& Obj). Recompilez le .pas.
    Je vous déconseille bien sûr de faire cela étant donné qu'il s'agit des sources fournies par Borland.
    --
    Arnaud DANEELS

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Est-ce que cette ligne est obligatoire ? (<!DOCTYPE html.
    Par cvb dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 11/12/2005, 00h07
  2. Manipulations binaires : savoir si un bit est "set"
    Par DiGiTAL_MiDWAY dans le forum Général Python
    Réponses: 2
    Dernier message: 18/09/2005, 16h42

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