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

Đề tài: Cách thoát chương trình hoàn toàn khi chương trình đang vẫn còn chạy vòng lặp vô tận? cần chỉ giáo về delegate

  1. #1
    Ngày gia nhập
    02 2010
    Bài viết
    52

    Mặc định Cách thoát chương trình hoàn toàn khi chương trình đang vẫn còn chạy vòng lặp vô tận? cần chỉ giáo về delegate

    Mod đừng xóa bài viết này nhé, nếu em biết hoặc search được thì em đâu viết bài để hỏi làm gì ^^!

    khi chương trình đang chạy, có thể Thread main hoặc Thread khác đang chạy 1 vòng lặp while(true), trong đó đang chờ dữ liệu từ client truy cập, nếu ko có client truy cập thì nó cứ chạy hoài chỗ đó, khi mình tắt chương trình, nó vẫn hoạt động làm tốn bộ nhớ, muốn tắt mình phải vào Start Task Manager để tắt nó, vậy có cách nào khi mình tắt chương trình thì nó cũng thoát hẳn những dòng code khác đang chạy ko?

    mình có vấn đề về Delegate, mình ko hiểu gì, chỉ đang tìm hiểu, nhưng thấy nó có nhiều cách làm quá, nên bây h mình cũng rối luôn ^^! có người hướng dẫn cách này, có người hướng dẫn cách khác và các cách sử dụng Delegate lại hơi khác nhau, mình thử áp dụng vào chương trình của mình thì ko được, nhưng nhờ có 1 bạn chỉ (đoạn code màu đỏ ở dưới) thì mình mới giải quyết được nhưng mà ko hiểu nó, pác nào hiểu xin giải thích kỹ lại giùm mình được ko (từng chức năng của các từ khóa và cách hoạt động) ?

    đoạn code dưới hoạt động như sau:
    khi chương trình khởi động sẽ chạy 1 Thread connect, khi có client connect thì dòng text của GroupBox sẽ từ màu đỏ chuyển thành màu xanh, và ô textBox txtconnect sẽ có giá trị là ip của máy connect tới (khi client connect thì nó sẽ gửi kèm theo ip của máy client tới server), mình nghe nói 1 Thread ko thể tác động lên tài nguyên của Thread khác, mỗi Thread độc lập, vậy sao khi mình thay đổi màu cho GroupBox.Text thì được còn gán chuỗi ip cho txtconnect.Text thì bị báo lỗi:
    Cross-thread operation not valid: Control 'txtconnect' accessed from a thread other than the thread it was created on.
    Code:
    private void Quan_Ly_Sinh_Vien_Load(object sender, EventArgs e)
            {
                Thread svconnect = new Thread(new ThreadStart(connect));
                svconnect.Start();
            }
    
            private TcpClient client;
    
            private delegate void delegate_settxtconnect(string s);
    
            private void settxtconnect(string s)
            {
                if (this.InvokeRequired) this.Invoke(new delegate_settxtconnect(settxtconnect), s);
                else txtconnect.Text = s;
            }
    
            private void connect()
            {
                IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.100"), 2222);
                TcpListener server = new TcpListener(ipep);
                server.Start();
                while (true)
                {
                    client = server.AcceptTcpClient();
                    groupBox4.ForeColor = Color.Blue;
                    StreamReader sr = new StreamReader(client.GetStream());
                    StreamWriter sw = new StreamWriter(client.GetStream());
                    string s = sr.ReadLine();
                    settxtconnect(s);
                    string kq = "";
                    while (true)
                    {
                        s = sr.ReadLine();
                        s = s.ToLower();
                        if (s.Equals("quit"))
                        {
                            sw.WriteLine("quit");
                            sw.Flush();
                            break;
                        }
                        else if (s.Equals("show sinhvien")) show_table_connect("sinhvien_select");
                        else if (s.Equals("show lop")) show_table_connect("lop_select");
                        else
                        {
                            sw.WriteLine("Khong hieu lenh");
                            sw.Flush();
                            sw.WriteLine("het");
                            sw.Flush();
                        }
                        
                    }
                    settxtconnect("");
                    groupBox4.ForeColor = Color.Red;
                    sr.Close();
                    sw.Close();
                }
                server.Stop();
            }
    pác nào có hướng dẫn Delegate và cách hoạt động (cách sử dụng) thì chia sẽ cho mình với ^^
    Email : leminhphuoc89@gmail.com

  2. #2
    Ngày gia nhập
    06 2009
    Nơi ở
    Cái hộp
    Bài viết
    1,255

    Bạn không biết search hay là không biết có công cụ search. Vào google gõ ra cả đống về delegate, vấn đề nào bạn thắc mắc cụ thể thì hãy hỏi thôi.
    Men talk of killing time, while time quietly kills them.
    Time is what we want most, but what we use worst.
    ------------------------------
    YinYang's Programming Blog

  3. #3
    Ngày gia nhập
    02 2010
    Bài viết
    52

    thì mình thắc mắc ngay dòng chữ đỏ đó, chỉ cái đó thôi, ko hiểu nó chạy như thế nào ^^!
    còn việc kết thúc chương trình dù đang có 1 Thread đang chạy (muốn ngưng chương trình hoàn toàn)

    mong bạn giúp đỡ chỗ này ^^!
    Email : leminhphuoc89@gmail.com

  4. #4
    Ngày gia nhập
    06 2009
    Nơi ở
    Cái hộp
    Bài viết
    1,255

    Truy xuất tài nguyên từ các thread khác nhau cần phải dùng delegate để invoke, hoặc chơi chiêu là set Control.CheckForIIlegalCrossThread...= false tuy nhiên dễ gây lỗi khác.
    Sử dụng Thread với chế độ IsBackground= true thì sẽ kết thúc được.
    Bạn có thể đọc thêm về Delegate và Thread trên blog của YinYang để biết thêm chi tiết.
    Men talk of killing time, while time quietly kills them.
    Time is what we want most, but what we use worst.
    ------------------------------
    YinYang's Programming Blog

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

  1. Cách thoát khỏi vòng lặp khi ấn phím bất kì trong C#?
    Gửi bởi eya_storm trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 21
    Bài viết cuối: 19-12-2011, 11:07 AM
  2. nhập số 1 hoài thì nó ko thoát khỏi vòng lặp
    Gửi bởi sieuthi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 09-02-2011, 10:37 AM
  3. làm sao thoát đc 2 vòng lặp ?
    Gửi bởi dtphong1603 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 31-12-2010, 10:53 AM
  4. Lập trình QT C++: Thoát khỏi 1 hàm có vòng lặp vô tận trong thread?
    Gửi bởi bboy0303 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 25-05-2009, 11:09 PM
  5. không thoát được khỏi vòng lặp while
    Gửi bởi Etramus trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 22-10-2008, 05:50 PM

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