J'aimerais ajouter une fenêtre de console supplémentaire pour enregistrer les informations Realtine de mon application WPF. Aucune idée ?? p>
bayo p>
Réponse: Console Demande forte> dans les propriétés du projet fonctionne pour moi. merci p>
5 Réponses :
Ne le faites pas. p>
Jetez un coup d'œil à log4net ou nlog pour le journal de sortie dans un fichier. Avec la bonne configuration de ces cadres, vous obtenez beaucoup plus de puissance (niveaux de journalisation différents, horodatages automatiques, noms de classe automatiques devant chaque ligne enregistrée) p>
Et pendant que vous y êtes, vous voudrez peut-être aussi mettre en œuvre une façade de votre propre, pour masquer le cadre de journalisation utilisé dans le reste de votre code. Cela vous permettrait de changer facilement le cadre d'exploitation forestière, si et lorsque le besoin se pose. p>
Si vous souhaitez avoir une console et une fenêtre d'interface graphique pour votre programme, vous pouvez implémenter ce comportement en compilant le projet comme application Console code> (
CSC / cible: EXE CODE >). Mais méfiez-vous: cela conduit très certainement à une mauvaise convivialité, car aucun utilisateur n'attendrait que votre application ait à la fois une console et une fenêtre d'interface graphique. P>
Auriez-vous au moins la courtoisie d'expliquer ce bowvote?
+1 Nous utilisons Nlog au travail, c'est très utile, mais en fonction de la situation de l'OP, n'est peut-être pas le meilleur outil (que nous ne pouvons pas extrapoler)
compiler le projet en tant qu'application de console fonctionne pour moi merci beaucoup bros
.NET semble le soutenir. Voir ma réponse.
Les réponses comme celle-ci sont au-delà stupides. Nulle part dans la question ne demande-t-il comment se connecter à un fichier, cette réponse est totalement hors de propos de la question. Vous devriez vraiment supprimer votre réponse "Ne pas le faire", ne me fais pas mal que Log4Net est génial (bien que je préfère Serilog puisqu'il prend en charge la journalisation structurée), mais cela n'a rien à voir avec la question ici.
Vous pouvez appeler FixationConsole Gagnez la fonction API, puis appelez cette fonction à l'aide de Pinvoke:
[DllImport("kernel32.dll", SetLastError = true)] static extern bool AttachConsole(uint dwProcessId); const uint ATTACH_PARENT_PROCESS = 0x0ffffffff; // default value if not specifing a process ID // Somewhere in main method AttachConsole(ATTACH_PARENT_PROCESS);
Je sais que ce n'est pas la meilleure réponse à cette question, mais je suis tombé sur cela lorsque j'essayais d'avoir mon travail de demande WPF à la fois de la ligne de commande et d'une interface graphique régulière. C'était l'astuce que je cherchais. Maintenant, lorsqu'un utilisateur met le commutateur de ligne de commande dans I, je peux produire des informations à la fenêtre de la console et lorsqu'elle est exécutée à partir de l'interface graphique, elle utilise la journalisation de log4net ordinaire. Merci!
Merci pour les idées ci-dessus. Voici toutes les étapes nécessaires pour ajouter une fenêtre de la console à une application WPF. Nous avons modifié notre application de test WPF afin qu'elle puisse être appelée à partir de la ligne de commande pendant le processus de test nocturne. Le seul problème est que l'application passe de la console, l'invite de commande n'est pas immédiatement écrite dans la fenêtre de la console après Freeconsole (). La fonction Freeconsole () semble manquer un appel à une fonction de rinçage () similaire pour forcer à écrire l'invite de commande à la fenêtre de la console. Mon raisonnement est que l'historique des flèches UP / BAS de la fenêtre de la console est disponible et la console accepte une autre commande, mais lorsque la prochaine application s'exécute et écrit à la fenêtre de la console, l'invite de commande manquante est écrite avec elle.
ouvrir app.xaml.cs et modifie la classe d'application comme ci-dessous. p>
public partial class App : Application { [DllImport("kernel32.dll", SetLastError = true)] static extern bool AttachConsole(uint dwProcessId); [DllImport("kernel32.dll", SetLastError = true)] static extern bool FreeConsole(); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern int GetConsoleTitle(System.Text.StringBuilder sbTitle, int capacity); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern bool SetConsoleTitle(string sTitle); [STAThread] public static int Main(string[] args) { Boolean hasExceptionOccured = false; System.Text.StringBuilder sbTitle = new System.Text.StringBuilder(); try { // If the user does not provide any parameters assume they want to run in GUI mode. if (0 == args.Length) { var application = new App(); application.InitializeComponent(); application.Run(); } else { const uint ATTACH_PARENT_PROCESS = 0x0ffffffff; // Default value if not specifying a process ID. // Attach to the console which launched this application. AttachConsole(ATTACH_PARENT_PROCESS); // Get the current title of the console window. GetConsoleTitle(sbTitle, 64); // Set the console title to the name and version of this application. SetConsoleTitle(Global.thisProgramsName + " - v" + Global.thisProductVersion); // Create a instance of your console class and call itâs Run() method. var mainConsole = new ReportTester.MainConsole(); mainConsole.Run(args); } } catch (System.Exception ex) { System.Console.WriteLine(ex.Message); System.Console.WriteLine(ex.StackTrace); if (null != ex.InnerException) { System.Console.WriteLine(ex.InnerException.Message); System.Console.WriteLine(ex.InnerException.StackTrace); } hasExceptionOccured = true; } finally { // Since the console does not display the prompt when freed, we will provide one here. System.Console.Write(">"); // Restore the console title. SetConsoleTitle(sbTitle.ToString()); // Free the console. FreeConsole(); } return (hasExceptionOccured ? 1 : 0); } }
Je ne vois pas comment cela est censé travailler. Que ressemble à ReportSter.MainConsole? D'où vient la méthode de la course?
Les exigences ne sont pas claires. Il semble que la seule exigence réelle soit capable de rediriger la sortie standard; Il semble y avoir besoin de la fenêtre de la console.
dans une application WPF vierge (nouvelle) Ajouter les éléments suivants à l'événement chargé ou quoi que ce soit: p> puis exécute le Programme d'une invite de commande et rediriger la sortie standard dans un fichier. La sortie sera dans le fichier. L'entrée standard peut être redirigée de manière correspondante. P> Ceci peut être très utile pour les situations où la norme IO est une exigence que nous n'avons aucun contrôle. Nous pouvons avoir une fenêtre d'interface graphique combinée à IO standard. P> p>
Si vous souhaitez avoir une console et une fenêtre d'interface graphique pour votre programme, vous pouvez la mettre en œuvre en compilant le projet sous forme d'application de console. P>
Allez simplement à vos propriétés de votre projet et modifiez le type de sortie à Maintenant, lorsque vous exécutez, vous obtiendrez la fenêtre WPF et une fenêtre de console. P> Application de la console Code> P>
Par "supplémentaire", voulez-vous dire que vous avez déjà utilisé la console intégrée? Windows permet uniquement à un processus d'une seule console, de sorte que, si vous en souhaitez plus d'un, vos options sont (1) utilisez un processus d'assistance ou (2) faire une fenêtre d'interface graphique qui ressemble à une console.
Si quelque chose fonctionne pour vous, ne pas i> Modifiez votre question. À la place, marquez la réponse comme acceptée et peut-être i> upvote
@ YAS4891 Personne n'a réellement ajouté cette réponse, c'était la réponse que je cherchais moi-même. Il aurait dû poster la réponse puis la marquée comme une réponse.