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 :

[VB.net]system.outofmemoryexception


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de grand_prophete
    Inscrit en
    Avril 2005
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 85
    Par défaut [VB.net]system.outofmemoryexception
    Bonjour a tous, j'espere que quelqu'un pourra m'aider.

    Voila, mon appplication utilise plusieurs threads (9 en tout) et lorsque je la démarre j'ai ce message d'erreur, mais une fois démarré et le message affiché, elle tourne parfairement, le probleme c'est que je peux pas me débarraser de ce mesage, ma seule alternative est de quitter l'application.
    J'ai raccourci mon, mais il y a bien 8 autres threads, 1 par fonction

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    Imports NationalInstruments.DAQmx
    Imports System.Threading
    Imports Microsoft.VisualBasic
    PublicClass Form1
    Inherits System.Windows.Forms.Form
    Private myTask2 As Task
    Private myTask4 As Task
    Private myTask5 As Task
    Private myDigitalReader2 As DigitalSingleChannelReader
    Private myDigitalReader4 As DigitalSingleChannelReader
    Private myDigitalReader5 As DigitalSingleChannelReader
    Private firstEdge As CITwoEdgeSeparationFirstEdge
    Private secondEdge As CITwoEdgeSeparationSecondEdge
    Private myTask As Task
    Private trigger1 As Task
    Private counterInReader As CounterReader
    Private _threadCalculs1 As Thread
    Private _threadCalculs2 As Thread
    Private _threadCalculs3 As Thread
    Private _threadCalculs4 As Thread
    Private _threadCalculs5 As Thread
    Private _threadCalculs6 As Thread
    Private _threadCalculs7 As Thread
    Private _threadCalculs8 As Thread
    #Region " Code généré par le Concepteur Windows Form "
    #EndRegion
    
    PublicSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
     
    Timer1.Enabled() = True
    myTask2 = New Task
    myTask2.DIChannels.CreateChannel("Dev1/port2/line0:7", "read2_digits", ChannelLineGrouping.OneChannelForAllLines)
    myDigitalReader2 = New DigitalSingleChannelReader(myTask2.Stream)
    myTask4 = New Task
    myTask4.DIChannels.CreateChannel("Dev1/port4/line0:7", "read4_digits", ChannelLineGrouping.OneChannelForAllLines)
    myDigitalReader4 = New DigitalSingleChannelReader(myTask4.Stream)
    myTask5 = New Task
    myTask5.DIChannels.CreateChannel("Dev1/port5/line0:7", "read5_digits", ChannelLineGrouping.OneChannelForAllLines)
    myDigitalReader5 = New DigitalSingleChannelReader(myTask5.Stream)
    EndSub
    
    PrivateSub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
    'Connection pci dio 96 port 2
    Dim readData2() AsBoolean
    readData2 = myDigitalReader2.ReadSingleSampleMultiLine()
    Babord.Value = readData2(6)
    Tribord.Value = readData2(5)
    
    ...blablabla
     
    'Affichage du mode 3d ou 2d
    If readData4(6) = TrueThen
    Mode.Text = "3D"
    ElseIf readData4(6) = FalseThen
    Mode.Text = "2D"
    EndIf
    C1.Value = c1pret.Value
    C2.Value = Not c2pret.Value
    C3.Value = c3pret.Value
    C4.Value = Not c4pret.Value
    'crée un délégué et affiche le delai de manière asynchrone
    StartThread()
    StartThread1()
    StartThread2()
    StartThread3()
    StartThread4()
    StartThread5()
    StartThread6()
    StartThread7()
     
    EndSub
    'Programmation de fonction, une par délai, cette fonction est programmée 8 fois
    PublicSub delais1()
     
    Dim max AsDouble = 0.3
    Dim min AsDouble = 0.001
    Dim valeurdelai AsString
    myTask = New Task
    Dim channel AsString
    myTask.CIChannels.CreateTwoEdgeSeparationChannel("Dev2/ctr0", "", min, _
    max, CITwoEdgeSeparationFirstEdge.Rising, CITwoEdgeSeparationSecondEdge.Rising, CITwoEdgeSeparationUnits.Seconds)
    counterInReader = New CounterReader(myTask.Stream)
    Dim data AsDouble = counterInReader.ReadSingleSampleDouble()
    valeurdelai = data.ToString
    Delai1.Text = valeurdelai
    EndSub
    
    
    DelegateSub quitte()
    PublicSub fermeture()
    Me.Dispose()
    Me.Close()
    EndSub
     
    
    
    PrivateSub StartThread()
    _threadCalculs1 = New Thread(AddressOf delais1) 
    _threadCalculs1.Name = "Thread1" 
    _threadCalculs1.Start() ' Démarrage du thread.
    EndSub
    
    
    PrivateSub quitter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles quitter.Click
    Dim fermeture1 AsNew quitte(AddressOf fermeture)
    fermeture1.BeginInvoke(Nothing, Nothing)
    EndSub
    
    
    EndClass
    

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    Je vois que tu utilises NIDAQmx.
    D'après le peu que j'en sais, les objets Task sont eux même des threads.
    Si en plus d'avoir 5 Task, il y a 8 threads qui en créent 8 autres, ça fait beaucoup trop de threads...

  3. #3
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Tu pourrais optimiser ta gestion des threads de calcul en ne les créant pas toi même, mais en utilisant le Pool de Thread .NET.

    Cela donnerai un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ThreadPool.QueueUserWorkItem(addressof FuncCalcul1)
    ThreadPool.QueueUserWorkItem(addressof FuncCalcul2)
    ThreadPool.QueueUserWorkItem(addressof FuncCalcul3)

  4. #4
    Membre confirmé Avatar de grand_prophete
    Inscrit en
    Avril 2005
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 85
    Par défaut
    OK merci, je pensais justement à ça. Je vais my' atteler . Sinon pour daqmx, je crois pas qu'il crée lui meme d'autre threads, parce que j'ai essayé sans les faire moi meme, et la catastrophe.

  5. #5
    Membre confirmé Avatar de grand_prophete
    Inscrit en
    Avril 2005
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 85
    Par défaut
    Ouaip, maintenant si je mets ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    ThreadPool.QueueUserWorkItem(addressof delais1) 
    
    Il me dis "la methode public sub delais1() n'a pas la meme signature que le délégué delegate sub WaitCallback (state as object)"

    Pardon je débute en VB.net alors ....

  6. #6
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    delais1 doit avoir cette signature

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub delais1(State As Object)


    Quelle est sa signature actuelle?

Discussions similaires

  1. [ASP.Net] System. Net. Mail
    Par beowax dans le forum ASP.NET
    Réponses: 3
    Dernier message: 27/10/2006, 09h05
  2. [VB.NET] System.Security.Permission ....
    Par ludovic85 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 17/10/2006, 11h24
  3. Réponses: 2
    Dernier message: 11/10/2006, 10h36
  4. [vb.net] [System.Threading] Etats d'un Thread
    Par arnolem dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/01/2006, 16h41
  5. [VB.NET] System.NullReferenceException
    Par LeGrosWinnie dans le forum Windows Forms
    Réponses: 5
    Dernier message: 29/12/2005, 13h31

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