發布-訂閱模型是指兩個或多個不同對象,一個廣播消息,其他的接受消息。發布者的廣播不受接受者的影響,接受者的數量和對接受消息的處理與發布者無關,降低了對象之間的耦合性。
下面以兩個窗口之間的通信示例
首先在vs里面新建一個windows窗體應用,自動生成Form1,然后添加一個窗口Form2,並在Form1和Form2中分別各添加一個button和一個文本框TextBox
雙擊Form1中button,進入代碼編輯如下
namespace Forms { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void setTxt(string s)//接受一個字符串並在文本框內顯示 { textBox1.Text = s; } private void button1_Click(object sender, EventArgs e)//當按鈕被點擊 { Form2 fm = new Form2();//實例化一個form2對象 fm.onClicks += setTxt;//添加事件,見Form2 fm.Show();//顯示Form2窗口 } } }
雙擊Form2的button,進入代碼編輯界面
namespace Forms { public partial class Form2 : Form { public Form2() { InitializeComponent(); } public event Action<string> onClicks;//定義事件 private void button1_Click(object sender, EventArgs e)//當按鈕被點擊 { string s = textBox1.Text;//獲取文本框輸入內容 onClicks(s);//執行事件並傳入參數 } } }
在Form1界面編譯啟動,點擊按鈕打開Form2。
在Form2中輸入的內容,點擊form2按鈕后,就會在form1中顯示
同理也可以再新建form3,form4,通過向form2中onClick添加自己的方法,就能實現訂閱。