Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Thread lắng nghe sự kiện từ bàn phím

  1. #1
    Ngày gia nhập
    01 2012
    Bài viết
    4

    Mặc định Thread lắng nghe sự kiện từ bàn phím

    Mình đang viết một ứng nhỏ cho cty của mình, app làm nhiệm vụ nhập và sửa bankcode của khách hàng, chương trình đọc dữ liệu từ một file excel và tự động fill các giá trị trong file excel đó vào các text field tương ứng, trong khi chạy đôi khi app bị "lỗi", không phải lỗi do app của mình mà do dữ liệu không chính xác, khi đó để stop app thì phải vào task Manager để kill process, mình đã viết một hàm nho nhỏ để stop lại app bằng phím ESCAPE, khi app không chạy mình nhấn nút ESCAPE thì nó thoát ngay nhưng khi nó đang fill data thì nó ignore luôn sự kiện đó, mình đang định tạo một thread khác, ngoài thread main để listen sự kiện từ bàn phím, nhưng đang không biết viết thế nào, mong các bạn chỉ giúp!

    Đây là hàm mình viết lắng nghe sự kiện từ bàn phím

    protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
    {
    const int WM_KEYDOWN = 0x100;
    const int WM_SYSKEYDOWN = 0x104;
    if((msg.Msg == WM_KEYDOWN)||(msg.Msg == WM_SYSKEYDOWN))
    {
    switch (keyData)
    {
    case Keys.Escape:
    this.Close();
    break;
    }
    }
    return base.ProcessCmdKey(ref msg, keyData);
    }

  2. #2
    Ngày gia nhập
    02 2012
    Bài viết
    4

    bạn thử sử dụng hàm Application.Exit() thử xem.

  3. #3
    Ngày gia nhập
    01 2012
    Bài viết
    4

    Mình đã dùng hàm đó rồi, nhưng vẫn không đc :-s

  4. #4
    Ngày gia nhập
    05 2011
    Bài viết
    299

    chương trình của bạn bị lỗi do dữ liệu không chính xác là thế nào? Bạn nói kỹ hơn xíu được không?
    Programming tutorials and source code examples

    Trong nhà không vợ không con
    Uống bia gặm thịt sao ngon thế này
    Nhậu nhẹt không bị la rầy
    Một tuần ta cứ bảy ngày " nâng ly "....

  5. #5
    Ngày gia nhập
    12 2008
    Bài viết
    17

    Trích dẫn Nguyên bản được gửi bởi cancel242 Xem bài viết
    Mình đang viết một ứng nhỏ cho cty của mình, app làm nhiệm vụ nhập và sửa bankcode của khách hàng, chương trình đọc dữ liệu từ một file excel và tự động fill các giá trị trong file excel đó vào các text field tương ứng, trong khi chạy đôi khi app bị "lỗi", không phải lỗi do app của mình mà do dữ liệu không chính xác, khi đó để stop app thì phải vào task Manager để kill process, mình đã viết một hàm nho nhỏ để stop lại app bằng phím ESCAPE, khi app không chạy mình nhấn nút ESCAPE thì nó thoát ngay nhưng khi nó đang fill data thì nó ignore luôn sự kiện đó, mình đang định tạo một thread khác, ngoài thread main để listen sự kiện từ bàn phím, nhưng đang không biết viết thế nào, mong các bạn chỉ giúp!

    Đây là hàm mình viết lắng nghe sự kiện từ bàn phím

    protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
    {
    const int WM_KEYDOWN = 0x100;
    const int WM_SYSKEYDOWN = 0x104;
    if((msg.Msg == WM_KEYDOWN)||(msg.Msg == WM_SYSKEYDOWN))
    {
    switch (keyData)
    {
    case Keys.Escape:
    this.Close();
    break;
    }
    }
    return base.ProcessCmdKey(ref msg, keyData);
    }
    hi!
    -->không biết "this" của bạn là gì?
    --> vấn đề có lẽ là: khi thực hiện fill data thì compiler hiện không đứng tại hàm ProcessCmdKey của bạn. Để thực hiện kill, bạn có thể cho phương thức fill data vào một thread riêng và có thể kill thread này khi cần. Có thể tham khảo thêm về thread tại đây.
    Nếu lỗi runtime thì bạn nên up cả project lên ?

  6. #6
    Ngày gia nhập
    01 2012
    Bài viết
    4

    Mặc định Thread lắng nghe sự kiện từ bàn phím

    @ross:Đại khái là do dữ liệu của file excel bị sai do user bất cẩn, nếu số record trong file excel là 1000 mà record số 100 bị sai thì mình cần stop app lại ngay, nhưng hiện tại app của mình vẫn chạy cho tới hết 1000 record => rất rủi ro.
    @blum: Mình đã dùng Background worker nhưng giữa các thread không thể can thiệp đc với nhau :-s, không hiểu có phải do mình làm không đúng???

  7. #7
    Ngày gia nhập
    12 2008
    Bài viết
    17

    Trích dẫn Nguyên bản được gửi bởi cancel242 Xem bài viết
    @ross:Đại khái là do dữ liệu của file excel bị sai do user bất cẩn, nếu số record trong file excel là 1000 mà record số 100 bị sai thì mình cần stop app lại ngay, nhưng hiện tại app của mình vẫn chạy cho tới hết 1000 record => rất rủi ro.
    @blum: Mình đã dùng Background worker nhưng giữa các thread không thể can thiệp đc với nhau :-s, không hiểu có phải do mình làm không đúng???
    Hi!không thể can thiệp vào đối tượng đang thực thi tại một thread, vì khi đó nó là độc quyến của thread đó, bạn chỉ có thể can thiệp vào nguyền tài nguyên(dữ liệu) của thread đang nắm giữ(theo dõi tiến độ)
    tôi có 2 cách sau:
    • c1: bạn tạo 2 thread: 1 cho fill data(Filler), 1 để lính gác(Listener-như 1 listener trong java), và 1 biến cờ(static nếu bạn thực hiện 2 thread từ 2 class khác nhau). Filler sẽ cập nhật trạng thái của nó vào biến cờ(có thể là lỗi-tùy bạn). Listener lắng nghe sự kiện của biến cờ và thực hiện các thao cần thiết
    • c2: bạn thực hiện với một đối tượng quản lý thread(threadmanager). Threadmanager thực hiện các thao tác khởi tạo và ngắt các thread con thuộc mình quản lý. Các yêu cầu ngắt và khởi tạo có thể bắt đầu từ các thread con hay Threadmanager. Điều này giống như việc bạn tạo các kết nối từ client đến server trong một mô hình client-server.
Trả lời cùng với trích dẫn Trả lời cùng với trích dẫn

  • #8
    Ngày gia nhập
    05 2011
    Bài viết
    299

    ý của mình cũng giống với c1 của blumbee. bạn sử dụng 1 thread để liên tục kiểm tra trạng thái đúng sai trong 1 khoảng thời gian nào đó, nếu đúng thì tiếp tục cho nhập, nếu sai thì dừng lại
    Programming tutorials and source code examples

    Trong nhà không vợ không con
    Uống bia gặm thịt sao ngon thế này
    Nhậu nhẹt không bị la rầy
    Một tuần ta cứ bảy ngày " nâng ly "....

  • Các đề tài tương tự

    1. Lập trình C Sử dụng thread và các phương thức đồng bộ trên thread để viết giải quyết bài toán reader/writer dạng tổng quát ?
      Gửi bởi danghoa92 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
      Trả lời: 1
      Bài viết cuối: 26-04-2013, 10:23 PM
    2. Cross-thread operation not valid: Control 'txt_1' accessed from a thread other than?
      Gửi bởi ndp1007 trong diễn đàn Thắc mắc lập trình C#
      Trả lời: 3
      Bài viết cuối: 01-03-2012, 12:20 AM
    3. Trả lời: 0
      Bài viết cuối: 16-02-2012, 10:37 PM
    4. lỗi Cross-thread operation not valid khi dùng thread
      Gửi bởi Riku trong diễn đàn Thắc mắc lập trình C#
      Trả lời: 1
      Bài viết cuối: 13-04-2011, 02:50 PM
    5. Thread trong Dialog và Thread trog Tabcontrol ???
      Gửi bởi nam_dkn trong diễn đàn Thắc mắc lập trình Visual C++
      Trả lời: 2
      Bài viết cuối: 20-03-2009, 10:43 AM

    Quyền hạn của bạn

    • Bạn không thể gửi đề tài mới
    • Bạn không thể gửi bài trả lời
    • Bạn không thể gửi các đính kèm
    • Bạn không thể chỉnh sửa bài viết của bạn