Console app wordt afgesloten bij Enter-toets

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • 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
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
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.

Je eigen tweaker.me redirect

Over mij

Alle reacties


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
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.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • 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
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
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.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • 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