none
一個程式中,產生自訂的類別物件,有辦法改變 Form1 中的控制項嗎? RRS feed

  • 問題

  • 這是一個 Server 端的網路程式,主要是監聽 Client 連入要求,然後產生一個 Processor 去處理收到的資料。
    希望與 Client 端建立或中斷連線時,顯示一個訊息在 Form1 的 listBox1 中。
    請問,可以做到嗎?感激不盡!

    寫程式的經驗少,不太會描述問題,怕老師們看不懂,貼程式碼佔版面,真的很抱歉…。
    部分程式碼如下:

    public partial class Form1 : Form
    {
        private delegate void mydelegate(string s);//自己建立的委派。
        private mydelegate update_msg;
    
        private void Form1_Load(object sender, EventArgs e)
        {
            update_msg = new mydelegate(AddListBoxItem);
    			//這委派的函式主要執行 this.listBox1.Items.Add([string]);
        }
    	
        //這個函式由一個 button_Click 事件發生時,產生一個 Thread 去執行。
        private void clientService()
        {
            TcpListener tcpl = new TcpListener(HostIP, HostPort);
            tcpl.Start();
            while (true)
            {
                Socket s = tcpl.AcceptSocket();
                this.Invoke(update_msg, "來自 " + s.RemoteEndPoint.ToString() + " 用戶連入。");
                    //我在這裡先列出了用戶 IP 在listBox1中。
                ClientProcessor cp = new ClientProcessor(s);//自訂的class
                Thread t = new Thread(new ThreadStart(cp.ProcessServiceRun));
                t.Start();
            }
        }
    }
    
    class ClientProcessor //自訂的 class
    {
        private Socket client;
        public ClientProcessor(Socket s)
        {
            client = s;
        }
        public void ProcessServiceRun()
        {
            //處理用戶端透過網路傳遞過來的資料。
    
           
            //我想在這裡面執行與用戶端斷線後,顯示
    
            //「與用戶 s.RemoteEndPoint.ToString() 中斷連線。」
    
            //訊息在 Form1 上的 listBox1 中可以做到嗎?
    
        }
    


    這好像不是新手該來的地方,每次在這論壇發文都好緊張喔…,有冒犯的地方請見諒。 今年亞東應屆畢業生,目前找短期工作&等兵單^_^。
    2009年8月5日 上午 10:37

解答

所有回覆

  • 只要你Invoke有寫對, 就可以傳遞
    請參考以下兩篇討論
    [有關Class的問題 ]
    [請教執行緒問題? ]

    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    • 已標示為解答 燦爛流星 2009年8月5日 下午 01:01
    2009年8月5日 上午 11:58
    版主
  • 你可以先試寫,把開發環境給的錯誤訊息跟錯誤行號貼出來。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年8月5日 下午 12:42
  • 謝謝兩位的回覆,我先試試那兩篇文章的方法。
    這好像不是新手該來的地方,每次在這論壇發文都好緊張喔…,有冒犯的地方請見諒。 今年亞東應屆畢業生,目前找短期工作&等兵單^_^。
    2009年8月5日 下午 01:00
  • 錯誤的開始,錯誤的用法.但應該還是做得出來.
    寫 Client-Service程式時.都會在 Client Service 間建立一個契約.而由VS Tool 或MS 其他工具去將契約產生Proxy的代理物件.而期代理物件裡就有非同步呼叫的方法了. 
     而不用用Thread去呼叫同步方法模擬成非同步樣式.

    2009年8月6日 上午 12:17
  • 錯誤的開始,錯誤的用法.但應該還是做得出來.
    寫 Client-Service程式時.都會在 Client Service 間建立一個契約.而由VS Tool 或MS 其他工具去將契約產生Proxy的代理物件.而期代理物件裡就有非同步呼叫的方法了. 
     而不用用Thread去呼叫同步方法模擬成非同步樣式.


    老師說的契約我不是很懂…。
    但是最後一句是指我 clientService() 的 Thread 方式不好嗎?

    這好像不是新手該來的地方,每次在這論壇發文都好緊張喔…,有冒犯的地方請見諒。 今年亞東應屆畢業生,目前找短期工作&等兵單^_^。
    2009年8月6日 上午 06:27
  • 不是不好,不是解不出來.而是 Design Pattern的問題.
    寫網路程式,有其呼叫的方式.其中有同步跟非同步.
    你用錯方是:
    1.程式複雜化.
    2.以後團隊開發時,每人都有其設計Style.當你以後妳維護或跟人家討論Code時,你就會邊討論邊幹礁,這是什麼鳥Code.
    2009年8月6日 上午 06:38
  • 不是不好,不是解不出來.而是 Design Pattern的問題.
    寫網路程式,有其呼叫的方式.其中有同步跟非同步.
    你用錯方是:
    1.程式複雜化.
    2.以後團隊開發時,每人都有其設計Style.當你以後妳維護或跟人家討論Code時,你就會邊討論邊幹礁,這是什麼鳥Code.

    嗯嗯,大概瞭解了。
    非常謝謝!
    這好像不是新手該來的地方,每次在這論壇發文都好緊張喔…,有冒犯的地方請見諒。 今年亞東應屆畢業生,目前找短期工作&等兵單^_^。
    2009年8月6日 上午 06:44