Toon posts:

Console app wordt afgesloten bij Enter-toets

Pagina: 1
Acties:

Vraag


  • ExcelFreak
  • Registratie: Augustus 2017
  • Laatst online: 04-03-2022
Mijn vraag
kan iemand mij vertellen waarom de console app wordt afgesloten bij Enter toets? ik probeer de enter toets na te simuleren om elke seconde een Enter toets in te drukken zonder werkelijk de enter toets te hebben ingedrukt.. alleen na 1x enter toets wordt de executable die ik had gebuild afgesloten. ook in de debug mode werkt het niet.

C#:
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
using System.Diagnostics;
using WindowsInput;
using WindowsInput.Native;
using Timer = System.Threading.Timer;

InputSimulator sim = new InputSimulator();
TimerCallback timerCallback = new TimerCallback(OnTimerCallback);

void OnTimerCallback(object? state)
{
    sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);

    ConsoleKey pressedKey = Console.ReadKey().Key;
    if (pressedKey == ConsoleKey.Enter)
    {
        Debug.WriteLine("Enter was pressed");
        
        // werkt niet, scherm wordt afgesloten..
        Console.ReadLine();
    }
}

Timer timer = new(callback: timerCallback, state: null, dueTime: 0, period: 1000);

// werkt niet, scherm wordt afgesloten..
Console.ReadLine();


Relevante software en hardware die ik gebruik
- visual studio 2022
- .net versie 6.0
- language c#
- app: console

Wat ik al gevonden of geprobeerd heb
ik probeer met een timer elke 1 seconde te enteren, dit werkt nog niet.. ik heb gezocht op google maar kon geen antwoord vinden

Beste antwoord (via ExcelFreak op 21-02-2022 15:13)


  • RobIII
  • Registratie: December 2001
  • Laatst online: 02:23

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Nou, wat je nu óók doet is een elke iteratie een nieuwe timer maken zonder de vorige te disposen. Waarom doe je in hemelsnaam zo moeilijk?

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Threading;
using WindowsInput;
using WindowsInput.Native;

public class Program
{
    private static readonly InputSimulator _sim = new();
    private static readonly TimerCallback _timercallback = new(OnTimerCallback);

    public static void Main()
    {
        using var timer = new Timer(_timercallback, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
        while (Console.ReadKey(true).Key != ConsoleKey.Escape) { }
    }

    private static void OnTimerCallback(object? state)
    {
        Console.WriteLine("Sending enter");
        _sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);
    }
}

[Voor 52% gewijzigd door RobIII op 21-02-2022 14:27]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij

Alle reacties


  • RobIII
  • Registratie: December 2001
  • Laatst online: 02:23

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Je stuurt een enter naar je eigen window terwijl je applicatie staat te wachten daarop (regel 26, de readline) en daarna niets meer te doen heeft en dús sluit 8)7

Probeer eens een ReadKey en wacht op "Q" ofzo.

[Voor 79% gewijzigd door RobIII op 21-02-2022 13:27]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • ExcelFreak
  • Registratie: Augustus 2017
  • Laatst online: 04-03-2022
RobIII schreef op maandag 21 februari 2022 @ 13:23:
Je stuurt een enter naar je eigen window terwijl je applicatie staat te wachten daarop (regel 26, de readline) en daarna niets meer te doen heeft en dús sluit 8)7

Probeer eens een ReadKey en wacht op "Q" ofzo.
ok ik denk dat ik het heb, bedankt voor je reactie.
wat ik nu doe is gewoon 'iets uitvoeren' net zolang totdat je een andere toetsenbordknop gebruikt (minstens 1x uitvoeren):
als je eventueel een betere manier hebt, hoor ik het graag

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System.Diagnostics;
using WindowsInput;
using WindowsInput.Native;
using Timer = System.Threading.Timer;

InputSimulator sim = new InputSimulator();
TimerCallback timerCallback = new TimerCallback(OnTimerCallback);

do
{
    Timer timer = new(callback: timerCallback, state: null, dueTime: 0, period: 1000);
} while (!(Console.ReadKey(intercept: true).Key == ConsoleKey.Escape));

void OnTimerCallback(object? state)
{
    sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);

    ConsoleKey pressedKey = Console.ReadKey().Key;
    if (pressedKey == ConsoleKey.Enter)
    {
        Debug.WriteLine("Enter was pressed");
        Console.ReadLine();
    }
}

Acties:
  • Beste antwoord
  • 0Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 02:23

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Nou, wat je nu óók doet is een elke iteratie een nieuwe timer maken zonder de vorige te disposen. Waarom doe je in hemelsnaam zo moeilijk?

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Threading;
using WindowsInput;
using WindowsInput.Native;

public class Program
{
    private static readonly InputSimulator _sim = new();
    private static readonly TimerCallback _timercallback = new(OnTimerCallback);

    public static void Main()
    {
        using var timer = new Timer(_timercallback, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
        while (Console.ReadKey(true).Key != ConsoleKey.Escape) { }
    }

    private static void OnTimerCallback(object? state)
    {
        Console.WriteLine("Sending enter");
        _sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);
    }
}

[Voor 52% gewijzigd door RobIII op 21-02-2022 14:27]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • ExcelFreak
  • Registratie: Augustus 2017
  • Laatst online: 04-03-2022
RobIII schreef op maandag 21 februari 2022 @ 14:16:
Nou, wat je nu óók doet is een elke iteratie een nieuwe timer maken zonder de vorige te disposen. Waarom doe je in hemelsnaam zo moeilijk?
ja kan idd beter, thx voor het betere alternatief


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee