2008-12-16 7 views
2

J'utilise Microsoft Visual C# 2008 Express Edition. (Et je m'excuse - c'est plus une question d'utilisabilité MS Vis C# qu'une question de programmation stricte ...)Le code ne s'exécute que dans le débogueur - MS Visual C#

J'ai écrit un petit programme. quand je l'exécute dans MS VC# avec le débogueur, tout va bien. Lorsque j'utilise le "click Once" pour générer quelque chose à déployer (j'utilise l'option "à partir d'un CD-ROM" par opposition à "d'un site web), puis je l'installe sur ma machine (ou sur une machine différente) et tout va bien, sauf une partie du code ne fonctionne pas!

Le code qui n'est pas en cours d'exécution est la partie "catch" d'une boucle try/catch J'ai intentionnellement un bug qui génère une exception dans l'application, je peux tester cette capture.Le catch apporte une interface graphique et demande à l'utilisateur de me renvoyer des données.Dans le débogueur - cela fonctionne très bien.Dans l'application autonome, publié, cela ne fonctionne pas.Objectif

Je souligne que je cours le "Express édition "parce qu'un ami a mentionné que je pourrais avoir un problème de déploiement et il semble que l'édition Express est limitée dans les options de déploiement et que peut-être l'édition Standard est ce dont j'ai besoin ... (puisque je peux utiliser Windows Installer "cliquez une fois" méthode de publication).

Est-ce que cela a du sens?

Appréciez l'aide!

-Adeena (une ancienne ligne de commande unix C++ programmeur qui a du mal à donner un sens de ce Microsoft monde « Visual »)

+0

Avez-vous essayé d'exécuter l'application dans VS en mode non-débogage? (Ctrl + F5). Qu'est-ce qui se passe alors? Le bloc catch est-il touché? – BFree

+0

Comment savez-vous que votre code de génération d'exception est en cours d'exécution? Peut-être que vous pouvez poster cela aussi. – Tim

+0

@BFree - Je vais essayer ça. @Tim - dans ma capture, une nouvelle boîte de dialogue apparaît (et je l'ai fait écrire des lignes à System.Console). Donc, quand je vois le dialogue et les lignes, je sais qu'il s'exécute. – adeena

Répondre

3

Est-ce code dans le constructeur/OnLoad d'une forme, par hasard? Il existe des différences connues dans ce domaine entre avec/sans débogueur. Le correctif consiste généralement à différer le code jusqu'à ce que le thread d'interface utilisateur traite les événements. Par exemple:

protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     BeginInvoke((Action)LoadStuff); 
    } 
    void LoadStuff() 
    { 
     // todo... 
    } 
+0

Le try/catch est autour de mon Application.Run() ... voir cet autre poste que j'ai eu l'autre jour: http://stackoverflow.com/questions/366718/what-is-the-best-way-to- collect-crash-data – adeena

+0

Oui, j'ai vu Application.Run se comporter bizarrement si vous lancez une exception dans le formulaire load. –

+0

ok - peut-être avoir l'essayer/attraper il n'y avait pas une très bonne idée après tout ... Je vais regarder en mettant autour d'autres domaines/fonctions clés tout au long du programme ... merci! – adeena

Questions connexes