Avatar billede _et Praktikant
20. januar 2006 - 20:11 Der er 13 kommentarer og
2 løsninger

consol input - program.exe /input1 /input2

1. hvordan læser jeg hvad der er blevet sendt ind fra consollen på kørsels tidspunkt.

2. Kan jeg scanne om en tast er trykket ned, ellers køre vidre.
do
{
    gør noget...;
}while(tast ikke trykket);
Avatar billede jens_klinting Nybegynder
20. januar 2006 - 20:24 #1
Den gode nyhed er, at det kan du godt. Den knap så gode er, at nedenstående er til .NET 2.0. Så det håber jeg du benytter :o) Det ser ud til at System.Console er blevet noget mere avanceret i 2.0 end det var i 1.1

public static void Main()
{
  ConsoleKeyInfo cki = new ConsoleKeyInfo();

  do {
    Console.WriteLine("\nPress a key to display; press the 'x' key to quit.");

    // Your code could perform some useful task in the following loop. However,
    // for the sake of this example we'll merely pause for a quarter second.

    while (Console.KeyAvailable == false)
    {
      Thread.Sleep(250); // Loop until input is entered.
    }
       
    cki = Console.ReadKey(true);
    Console.WriteLine("You pressed the '{0}' key.", cki.Key);
  } while(cki.Key != ConsoleKey.X);
}
Avatar billede datasource Nybegynder
20. januar 2006 - 20:25 #2
1. jeg forstår ikke spørgsmålet ?

2:

do
{
    gør noget...;
}while(Console.ReadLine() != "a");  // hvis det er a der skal tastes
Avatar billede jens_klinting Nybegynder
20. januar 2006 - 20:27 #3
Åh, jeg læste lige dit spørgsmål igen.
Ovenstående er kun til spørgsmål 2. Med hensyn til 1, så findes commandline argumenterne som parametre i Main.

[STAThread]
static void Main(string[] args)
{
  string input1 = args[0];
  string input2 = args[1];
}
Avatar billede jens_klinting Nybegynder
20. januar 2006 - 20:29 #4
Til datasource.
Det kræver at brugeren trykker a + enter. Jeg tror at _et er på jagt efter noget der minder om et keypress event
Avatar billede _et Praktikant
20. januar 2006 - 20:34 #5
1. Perfekt løsning.

2. løkken må ikke stoppe. Den skal "kigge", og så reagerer eller køre vidre.

Et lille side spm.
Hvad betyder denne linje : [STAThread]
Avatar billede jens_klinting Nybegynder
20. januar 2006 - 20:46 #6
System.STAhread er en attribut som angiver at
COM tråd-modellen for applikationen er Single Threaded Apartment.

Hvis din app ikke benytter COM Interop, så kan du bare fjerne den, da den udelukkende er relevant i forbindelse med COM Interop.

Det med at løkken skal kigge, hvad mener du præcist med det? Skal den vente til der en der trykker? Skal der trykkes på noget bestemt?
Avatar billede _et Praktikant
20. januar 2006 - 21:00 #7
det er en quit program funktion.

Den må ikke vente. Det skal være sådan at hvis knappen ikke er trykket ned, når bool testen fortages, skal løkken køre endnu en omgang.

Desuden er der et problem med spm.1
Jeg får en "out of range" error
Her er lidt kode, (Hvis der er rod, er der fordi jeg har prøvet at løse problemet)

Jeg kalder sådan: fil.exe /1 /60

using System;
using System.Reflection;


namespace ConsoleApplication10
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            string input1 = "";
            string input2 = "";
            if (args.GetLength(0) <= 1)
                input1 = args[1];
            if (args.GetLength(1) <=2)
                input2 = args[2];
            if ( input1 != "?")
            {
Avatar billede _et Praktikant
20. januar 2006 - 21:04 #8
Her er cmd output

D:\_THR_Dokumenter\_Programmering\_Visual_Studie\unread_mail_c\bin\Debug>unread_
mail_c.exe /? /d
2

Unhandled Exception: System.IndexOutOfRangeException: Index was outside the boun
ds of the array.
  at System.Array.GetLength(Int32 dimension)
  at ConsoleApplication10.Class1.Main(String[] args) in d:\_thr_dokumenter\_pro
grammering\_visual_studie\unread_mail_c\class1.cs:line 17

D:\_THR_Dokumenter\_Programmering\_Visual_Studie\unread_mail_c\bin\Debug>
Avatar billede _et Praktikant
20. januar 2006 - 21:11 #9
har løst problemet med spm 1.
Avatar billede jens_klinting Nybegynder
20. januar 2006 - 21:19 #10
Jeg ved ikke, om det var det du mente med 'har løst prop med spm 1'.
Men GetLength(int) giver dig længden af den dimension du angiver med int.
Brug args.Length istedet, for du har kun et en-dimentionelt array.
Avatar billede _et Praktikant
20. januar 2006 - 21:21 #11
JA, det opdagede jeg :_)
Avatar billede jens_klinting Nybegynder
20. januar 2006 - 21:27 #12
ok, noget i denne stil. Jeg skal lige sige, at jeg p.t. ikke har VS 2005 installeret, så jeg koder lidt i blinde :o)

public static void Main(string[] args)
{
  do
  {
    // Gør hvad der skal gøres...       
  }
  while (!ExitKeyPressed());
}

private static bool ExitKeyPressed()
{
  if (Console.KeyAvailable)
  {
    // Hvis du ønsker at tjekke på om x er trykket ned
    // ConsoleKeyInfo cki = Console.ReadKey(true);
    // return (cki.Key != ConsoleKey.X);

    // Hvis du er ligeglad hvilken key der er trykker ned
    return true;
  }
  else
  {
    return false;
  }
}
Avatar billede jens_klinting Nybegynder
20. januar 2006 - 21:34 #13
Oops...

// return (cki.Key != ConsoleKey.X);

skal selvfølgelig være

// return (cki.Key == ConsoleKey.X);
Avatar billede _et Praktikant
23. januar 2006 - 00:07 #14
Hey - Jens!

Hvis du vil have lidt point, så svar :)
Avatar billede jens_klinting Nybegynder
25. januar 2006 - 22:27 #15
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester