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

VB.NET Discussion :

sub main déclaré introuvable mais présent !


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 317
    Par défaut sub main déclaré introuvable mais présent !
    Bonjour

    J'ai récemment migré (4 mois) sur VB 2019 qui fonctionne bien pour tous mes programmes en mode Form.

    Pour créer une application avec des threads je recherche des applications exemples de thread sur le site https://docs.microsoft.com/fr-fr/dot...tframework-4.8

    Comme cet exemple qui montre comment utiliser invoke :

    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
    Imports System.Threading
    Imports System.Threading.Tasks
     
    Module InvokeDemo
     
        ' Demonstrated features:
        '   Parallel.Invoke()
        ' Expected results:
        '   The threads on which each task gets executed may be different.
        '   The thread assignments may be different in different executions.
        '   The tasks may get executed in any order.
        ' Documentation:
        '   http://msdn.microsoft.com/library/dd783942(VS.100).aspx
        Private Sub Main()
            Try
                ' Param #0 - static method
                Parallel.Invoke(AddressOf BasicAction,
                                Sub()
                                    ' Param #1 - lambda expression
                                    Console.WriteLine("Method=beta, Thread={0}", Thread.CurrentThread.ManagedThreadId)
                                End Sub,
                                Sub()
                                    ' Param #2 - in-line delegate
                                    Console.WriteLine("Method=gamma, Thread={0}", Thread.CurrentThread.ManagedThreadId)
                                End Sub)
            Catch e As AggregateException
                ' No exception is expected in this example, but if one is still thrown from a task,
                ' it will be wrapped in AggregateException and propagated to the main thread.
                Console.WriteLine("An action has thrown an exception. THIS WAS UNEXPECTED." & vbLf & "{0}", e.InnerException.ToString())
            End Try
        End Sub
     
        Private Sub BasicAction()
            Console.WriteLine("Method=alpha, Thread={0}", Thread.CurrentThread.ManagedThreadId)
        End Sub
     
    End Module
    J'ouvre Visual studio sur la console en visual basic (application console (.NET Framework 4.72)) que je cré.

    Je copie le programme ci-dessus dans le code.

    Lorsque je lance le programme par 'Démarrer' il apparait l'erreur BC30420 'Sub Main' est introuvable dans "ConsoleApp6.module1"

    Or que Sub Main est bien présent dans le code ci-dessus !

    Ce problème se reproduit pour tout les exemples du site concernant les thread sur console.

    Il est vrai que je n'ai pas utilisé console depuis la migration.

    Faut-il configurer ma plateforme ?

    J'utilise la mauvaise application ?

    Autre problème lié au code qui est peut être incomplet ?

    Merci pour votre aide

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    essaye de remplacer private par public
    sinon essaye une class à la place du module (avec une public shared sub main)
    sinon tu peux aller voir dans les propriétés du projet, y a un combobox qui permet de choisir l'objet de démarrage, la sub main doit être listée
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éprouvé Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 317
    Par défaut
    Bonjour,

    Merci pour tes conseils ! J'ai changé private en public et effectivement le démarrage était sur 'module' et non sur 'sub main'. Une fois corrigé le module fonctionne parfaitement. Il faut ajouter un thread.sleep(3000) pour avoir le temps de lire le contenu de la console.

    Par contre en remplaçant le module par une classe et en 'public shared sub main' la compilation donne l'erreur suivante :
    Erreur BC30518 La résolution de surcharge a échoué, car aucun 'Invoke' accessible ne peut être appelé avec ces arguments*:
    'Public Shared Overloads Sub Invoke(ParamArray actions As Action())': Impossible de faire référence à un membre instance d'une classe à partir d'une méthode partagée ou d'un initialiseur de membre partagé sans une instance explicite de la classe.
    et là je cale !

    Une idée ?

    A vous lire
    Merci

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    dans une appli console on ajoute souvent Console.ReadKey (ou ReadLine) ce qui permet de garder la fenêtre ouverte jusqu'à l'appuie sur une touche (ou entrée)
    avec un console.WriteLine("appuyez sur une touche pour quitter") avant ca fait pas mal

    après le compilateur te précises que tu veux appeler une méthode non shared depuis une méthode shared ce qui est interdit
    il faut donc que ta méthode BasicAction soit déclarée Shared aussi

    après si tu fais des modules tu dois venir de vb6, et il faut comprendre la POO pour comprendre ce qu'est Shared, sachant qu'un membre Shared correspond à peu près à un membre de module, c'est accessible de partout sans instance
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éprouvé Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 317
    Par défaut
    Merci Pol63 pour tes explications perspicaces.

    Effectivement (méa culpa) le manuel en ligne précise que les routines doivent être shared !

    Efficace le truc su stand by avec ReadKey.

    Tu as raison je vient du vb6 et même beacoup plus loin Turbo Basic puis Power Basic ! Et j'oublie les ancêtres sur HP avec une ligne de programme affiché en 1979 ! Le programme et résultats s'affichait sur ruban papier comme les caisses de magasin.

    Le programme écrit ainsi en Class fonctionne parfaitement :

    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
    Imports System.Threading
    Imports System.Threading.Tasks
     
    Class InvokeDemo
     
        Public Shared Sub Main()
            Try
     
                Parallel.Invoke(AddressOf BasicAction,
                                Sub()
     
                                    Console.WriteLine("Method=beta, Thread={0}", Thread.CurrentThread.ManagedThreadId)
     
                                End Sub,
                                Sub()
     
                                    Console.WriteLine("Method=gamma, Thread={0}", Thread.CurrentThread.ManagedThreadId)
                                End Sub)
            Catch e As AggregateException
                ' No exception is expected in this example, but if one is still thrown from a task,
                ' it will be wrapped in AggregateException and propagated to the main thread.
                Console.WriteLine("An action has thrown an exception. THIS WAS UNEXPECTED." & vbLf & "{0}", e.InnerException.ToString())
            End Try
     
            Console.WriteLine("appuyez sur une touche pour quitter")
            Console.ReadKey()
       End Sub
     
        Public Shared Sub BasicAction()
            Console.WriteLine("Method=alpha, Thread={0}", Thread.CurrentThread.ManagedThreadId)
        End Sub
     
    End Class
    Merci pour vos aides.

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

Discussions similaires

  1. type ou nom d'espace de nom introuvable, mais pourtant bien présent
    Par JeffPalmier dans le forum Framework .NET
    Réponses: 2
    Dernier message: 14/05/2014, 11h27
  2. [AC-2007] dll introuvable mais présente
    Par gwent dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/10/2010, 09h00
  3. Réponses: 1
    Dernier message: 18/05/2009, 14h39
  4. Sub main pour macro excel
    Par theshark85 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/09/2007, 14h48
  5. [Debutant]Jar executable ==> Main-Class introuvable
    Par Invité dans le forum Langage
    Réponses: 10
    Dernier message: 09/12/2006, 14h07

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