Tôi biết tôi có thể sử dụng ReadKey cho điều đó nhưng ứng dụng sẽ đóng băng cho đến khi người dùng nhấn một phím. Có thể (trong giao diện điều khiển ứng dụng) để có một số vòng lặp chạy và vẫn có thể phản ứng? Tôi chỉ có thể nghĩ về các sự kiện nhưng không chắc chắn cách sử dụng chúng trong bảng điều khiển. Ý tưởng của tôi là vòng lặp sẽ kiểm tra đầu vào trong mỗi lần lặp.C# đọc đầu vào của người dùng mà không cần dừng ứng dụng
6
A
Trả lời
7
Họ cách tôi đã làm điều này cho các ứng dụng của riêng tôi là để có một sợi chuyên dụng mà các cuộc gọi vào System.Console.ReadKey(true)
và đặt các phím bấm (và bất kỳ sự kiện khác) vào một hàng đợi thông điệp.
Chuỗi chính sau đó dịch vụ hàng đợi này trong một vòng lặp (theo cách tương tự với vòng lặp chính trong ứng dụng Win32), đảm bảo việc xử lý sự kiện và hiển thị được xử lý trên một chuỗi đơn.
private void StartKeyboardListener()
{
var thread = new Thread(() => {
while (!this.stopping)
{
ConsoleKeyInfo key = System.Console.ReadKey(true);
this.messageQueue.Enqueue(new KeyboardMessage(key));
}
});
thread.IsBackground = true;
thread.Start();
}
private void MessageLoop()
{
while (!this.stopping)
{
Message message = this.messageQueue.Dequeue(DEQUEUE_TIMEOUT);
if (message != null)
{
switch (message.MessageType)
{
case MessageType.Keyboard:
HandleKeyboardMessage((KeyboardMessage) message);
break;
...
}
}
Thread.Yield(); // or Thread.Sleep(0)
}
}
+0
Hmm Tôi thấy, vì vậy tôi đoán không có cách nào dễ dàng như thế. Cảm ơn – Ptr
1
Có vòng lặp chạy trong chuỗi riêng biệt.
class Program
{
private static string input;
public static void Main()
{
Thread t = new Thread(new ThreadStart(work));
input = Console.ReadLine();
}
private static void work()
{
while (input == null)
{
//do stuff....
}
}
}
Các vấn đề liên quan
- 1. java.util.NoSuchElementException - Máy quét đọc đầu vào của người dùng
- 2. C# Console Đầu vào người dùng
- 3. Makefile - Tại sao lệnh đọc không đọc đầu vào của người dùng?
- 4. Đọc e-mail mà không cần Outlook ứng dụng mở
- 5. Mở ứng dụng mà không cần chạm vào biểu tượng
- 6. Làm thế nào để cài đặt ứng dụng ClickOnce mà không cần nhắc người dùng?
- 7. mantis đăng ký người dùng mới mà không cần email
- 8. Các ứng dụng Windows Forms có chờ đợi các đầu vào của người dùng không?
- 9. Gỡ lỗi mã C# mà không cần chạy ứng dụng
- 10. Đọc một nhân vật từ đầu vào tiêu chuẩn tại Gò (mà không cần nhấn Enter)
- 11. Lọc đầu vào của người dùng - tôi có cần lọc HTML không?
- 12. Bắt đầu trò chuyện video mà không cần tương tác với người dùng - Android
- 13. Ứng dụng nền mà không cần ui
- 14. Chuyển đổi đầu vào của người dùng thành regex
- 15. Thêm văn bản vào JTextPane mà không cần người dùng chỉnh sửa?
- 16. `getchar()` lưu trữ đầu vào của người dùng ở đâu?
- 17. Không gian in hoặc tab C++ được cung cấp số nguyên đầu vào của người dùng
- 18. Xây dựng chuỗi kết nối từ đầu vào của người dùng trong ứng dụng WPF
- 19. Làm thế nào để tránh lặp lại dòng mới khi đọc đầu vào của người dùng?
- 20. Đọc từ mongodb mà không cần khóa
- 21. GTK # .NET Ứng dụng mà không cần GTK riêng # Install
- 22. Lọc một ObservableCollection bằng đầu vào của người dùng
- 23. Haskell - vòng lặp qua đầu vào của người dùng
- 24. Xác thực xác thực mà không cần mật khẩu, chỉ sử dụng tên người dùng
- 25. chức năng của màn hình cảm ứng và đầu vào của người dùng
- 26. ASP.Net - Sử dụng xác thực cơ bản mà không cần người dùng Windows
- 27. Làm thế nào để đọc đầu vào của người dùng thành một biến trong Bash?
- 28. Đầu vào của người dùng trong một hộp thoại MessageDialog
- 29. jQuery dừng setTimeout nếu người dùng nhấp vào trường nhập
- 30. iOS không nhận được người dùng yêu cầu ứng dụng của người dùng
Chắc chắn bạn muốn ứng dụng ở trạng thái sẵn sàng chấp nhận đầu vào của người dùng, vì vậy, nhấn phím bạn có thể thực hiện một số chức năng. Hoặc là điều này giống như một nút bấm để hủy bỏ chế biến ?? – jimplode
Có nhưng ví dụ tuyệt vời là một trò chơi - bạn cần phải chạy một số vòng lặp (chuyển động của đối phương, bất cứ điều gì) nhưng vẫn đăng ký đầu vào người chơi – Ptr