// MF PlugIn Menu click private void OnMenuClick(object sender, EventArgs ea) { ToolStripItem tsi = sender as ToolStripItem; if (tsi != null) { MFPlugInMenuItem mfdp = tsi.Tag as MFPlugInMenuItem; if (m_pluginThread == null || !m_pluginThread.IsAlive) { m_currentPlugInObject = mfdp; // Modal dialogs need to run on the same thread if (!mfdp.RunInSeparateThread) { OnPlugInExecuteThread(); } else { m_pluginThread = new Thread(new ThreadStart(OnPlugInExecuteThread)); m_pluginThread.SetApartmentState(ApartmentState.STA); m_pluginThread.Start(); } } else { DumpToOutput(Properties.Resources.WarningPlugInPending); } } }
private void OnPlugInExecuteThread() { MFDevice dev = null; if (m_currentPlugInObject == null) { return; } try { m_deploy.OpenWithoutConnect = !m_currentPlugInObject.RequiresConnection; dev = ConnectToSelectedDevice(); if (dev != null) { if (m_currentPlugInObject.RunInSeparateThread) { DumpToOutput(string.Format(Properties.Resources.XCommand, m_currentPlugInObject.Name)); } if (m_currentPlugInObject.RequiresConnection && (!dev.DbgEngine.TryToConnect(5, 100))) { throw new MFDeviceNoResponseException(); } m_currentPlugInObject.OnAction(this, dev); } } catch (System.Threading.ThreadAbortException) { } catch (Exception exc) { DumpToOutput(Properties.Resources.ErrorPrefix + exc.Message); } finally { DisconnectFromSelectedDevice(); m_deploy.OpenWithoutConnect = false; if (m_currentPlugInObject.RunInSeparateThread) { DumpToOutput(string.Format(Properties.Resources.StatusXComplete, m_currentPlugInObject.Name)); } m_currentPlugInObject = null; } }
private int AddPlugIns(Type [] types, string menuName) { int cnt = 0; if (!menuStrip1.Items.Contains(m_pluginMenu)) { menuStrip1.Items.Insert(3, m_pluginMenu); m_pluginMenu.DropDownItems.Add(toolStripSeparator1); ToolStripItem tsi = m_pluginMenu.DropDownItems.Add(Properties.Resources.MenuItemCancel); tsi.Click += new EventHandler(OnCancelMenuClick); } ToolStripMenuItem parentMenu = new ToolStripMenuItem(menuName); m_pluginMenu.DropDownItems.Insert(0, parentMenu); foreach (Type t in types) { if (t.IsSubclassOf(typeof(MFPlugInMenuItem))) { ConstructorInfo ci = t.GetConstructor(new Type[0] { }); MFPlugInMenuItem plugin = ci.Invoke(new object[0] { }) as MFPlugInMenuItem; if (plugin != null) { m_plugins.Add(plugin); ToolStripMenuItem tsi = new ToolStripMenuItem(plugin.Name); tsi.Tag = plugin; tsi.Click += new EventHandler(OnMenuClick); parentMenu.DropDownItems.Insert(0, tsi); cnt++; // any plugin submenu items? if (plugin.Submenus != null) { foreach (MFPlugInMenuItem mi in plugin.Submenus) { ToolStripMenuItem ti = new ToolStripMenuItem(mi.Name); ti.Tag = mi; ti.Click += new EventHandler(OnMenuClick); tsi.DropDownItems.Add(ti); } } } } } return(cnt); }