none
关于.NET Remoting刷新窗体的问题 RRS feed

  • 问题

  • 用.NET Remoting做了一个小程序,先运行服务端时行监听,服务端控件中有一个ListBox控件,专门用来记录客户端的IP,客户端启动的时候,首先建立通道,进行注册,然后再把本机IP发送给服务端,服务端用ListBox展现出来.目前在服务端能获得客户端发送过来的IP,然后把ListBox的DataSource也设置成存放IP的ArrayList了,关键是ListBox展现不出来,还是空的.怎么样才能让运行后的客户端能够实时展现客户端发送的IP呢,不需要再添加一个"刷新"按钮?Win From中有没有类似Web中的AJAX之类的技术?!
    2011年9月19日 3:09

答案

  • 如下示例:
    using System;
    using System.ComponentModel;
    using System.Windows.Forms;
    
    namespace X.DemoCenter.Winfroms
    {
        public partial class MainFrom : Form
        {
            public MainFrom()
            {
                InitializeComponent();
                InitializeDemo();
    
                this.Load += (o, e) =>
                {
                    // 模拟一个线程,每过1秒增加一条数据
                    using (var bg = new BackgroundWorker())
                    {
                        bg.DoWork += (o1, e1) =>
                        {
                            while (true)
                            {
                                this.listBox.BeginInvoke(new Action(delegate
                                {
                                    this.ds.Add(new DataItem() { Ip = Guid.NewGuid().ToString() });
                                }));
                                System.Threading.Thread.Sleep(1000);
                            }
                        };
                        bg.RunWorkerAsync();
                    }
                };
            }
    
            BindingList<DataItem> ds;
            ListBox listBox;
    
            void InitializeDemo()
            {
                ds = new BindingList<DataItem>();
    
                listBox = new ListBox();
                listBox.Dock = DockStyle.Fill;
                listBox.DisplayMember = "IP";
                listBox.DataSource = ds;
                //listBox.DataSource = new BindingSource(ds, null); 
    
                this.Controls.Add(listBox);
            }
    
            public class DataItem
            {
                public string Ip { get; set; }
            }
        }
    }
    
    


    知识改变命运,奋斗成就人生!
    2011年9月19日 5:06
    版主

全部回复

  • 你好!

    ArrayList 不支持双向绑定,建议使用 BindingList 做为数据源。


    知识改变命运,奋斗成就人生!
    2011年9月19日 4:59
    版主
  • 如下示例:
    using System;
    using System.ComponentModel;
    using System.Windows.Forms;
    
    namespace X.DemoCenter.Winfroms
    {
        public partial class MainFrom : Form
        {
            public MainFrom()
            {
                InitializeComponent();
                InitializeDemo();
    
                this.Load += (o, e) =>
                {
                    // 模拟一个线程,每过1秒增加一条数据
                    using (var bg = new BackgroundWorker())
                    {
                        bg.DoWork += (o1, e1) =>
                        {
                            while (true)
                            {
                                this.listBox.BeginInvoke(new Action(delegate
                                {
                                    this.ds.Add(new DataItem() { Ip = Guid.NewGuid().ToString() });
                                }));
                                System.Threading.Thread.Sleep(1000);
                            }
                        };
                        bg.RunWorkerAsync();
                    }
                };
            }
    
            BindingList<DataItem> ds;
            ListBox listBox;
    
            void InitializeDemo()
            {
                ds = new BindingList<DataItem>();
    
                listBox = new ListBox();
                listBox.Dock = DockStyle.Fill;
                listBox.DisplayMember = "IP";
                listBox.DataSource = ds;
                //listBox.DataSource = new BindingSource(ds, null); 
    
                this.Controls.Add(listBox);
            }
    
            public class DataItem
            {
                public string Ip { get; set; }
            }
        }
    }
    
    


    知识改变命运,奋斗成就人生!
    2011年9月19日 5:06
    版主