当前位置: 代码迷 >> C# >> c# form 变量 嘱托 事件
  详细解决方案

c# form 变量 嘱托 事件

热度:566   发布时间:2016-05-05 02:47:34.0
c# form 变量 委托 事件

自己编写了一个dll文件 
有个public 变量  Number
里面有方法循环读取外部数据来更新这个变量.

在我编写的程序里调用这个DLL变量的Number的时候也要写循环来时时读取更新值

我想是不是可以利用 委托 事件 把程序里的循环去掉.

DLL里的值更新的时候自动出发事件 

程序里方法做操作.
------解决思路----------------------
貌似可行吧。DLL里发布一个事件,谁感兴趣就订阅呗。
实际上很多控件不也这么运行着嘛。控件先检查绑定的数据源是否实现了INotifyPropertyChange、INotifyCollectionChanged这样的接口(这个接口必须提供PropertyChanged这样的事件),有,老子就订阅这个接口的规范中规定的那些事件,比如CollectionChange, PropertChanged这样的事件,没有,老子就不管。订阅的情况下,控件绑定的数据源就算被别的渠道更新了,控件也能立即知道。所以在.net的控件体系里,一个控件去检查它绑定的数据源是否实现INotifyPropertyChange、ICollectionChanged,这个事件定好了的,是一种预先约定好的机制。扯远了。。。
------解决思路----------------------
dll 文件

    public class Class1
    {
        public delegate void nText(string msg);
        public event nText n_Text;

        public Class1()
        {
            Thread thread = new Thread(new ThreadStart(to));
            thread.Start();
        }
        private void to()
        {
            for (int i = 0; 1 < 100; i++)
            {
                if (n_Text != null)
                {
                    n_Text(i.ToString());
                }
            }
        }
    }


form代码

        private void Form1_Load(object sender, EventArgs e)
        {
            Class1 cs1 = new Class1();
            cs1.n_Text += cs1_n_Text;
            
        }

        void cs1_n_Text(string msg)
        {
            this.Invoke((Action)delegate { textBox1.Text = msg + "\r\n"; });
        }
  相关解决方案