using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using ORiN2.interop.CAO; namespace Message { public partial class frmMessage : Form { private delegate void SetTextCallback(string msg); // OnMessage処理用デリゲート private CaoEngine caoEng; private CaoWorkspaces caoWss; private CaoWorkspace caoWs; private CaoControllers caoCtrls; private CaoController caoCtrl; public frmMessage() { InitializeComponent(); } private void frmMessage_Load(object sender, EventArgs e) { try { // CAOエンジン生成 caoEng = new CaoEngine(); caoWss = caoEng.Workspaces; caoWs = caoWss.Item(0); // コントローラコレクションの取得 caoCtrls = caoWs.Controllers; // コントローラに接続 caoCtrl = caoCtrls.Add("RC1", "CaoProv.Dummy", "", ""); // OnMessageイベントハンドラの登録 caoCtrl.OnMessage += new _ICaoControllerEvents_OnMessageEventHandler(OnMessage); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void frmMessage_FormClosed(object sender, FormClosedEventArgs e) { try { // コントローラオブジェクトの解放 if (caoCtrl != null) { caoCtrls.Remove(caoCtrl.Name); System.Runtime.InteropServices.Marshal.ReleaseComObject(caoCtrl); caoCtrl = null; } System.Runtime.InteropServices.Marshal.ReleaseComObject(caoCtrls); caoCtrls = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(caoWs); caoWs = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(caoWss); caoWss = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(caoEng); caoEng = null; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void cmdExecute_Click(object sender, EventArgs e) { try { caoCtrl.Execute("", ""); } catch (Exception ex) { MessageBox.Show(ex.Message); } } // OnMessageイベント private void OnMessage(CaoMessage pICaoMsg) { try { // 別スレッドのメソッド呼び出し SetTextCallback SetMsg = new SetTextCallback(SetText); Invoke(SetMsg, pICaoMsg.Value.ToString()); } catch (Exception ex) { MessageBox.Show(ex.Message); } } // OnMessage時の処理関数 private void SetText(string msg) { textBox1.Text = msg; } } }