private void ISchedulePlugin_Click(object sender, RoutedEventArgs e) { MenuItem item = sender as MenuItem; ISchedulePlugin plugin = item.Tag as ISchedulePlugin; if (MessageBox.Show(plugin.info, plugin.name, MessageBoxButton.YesNo) == MessageBoxResult.Yes) { List <Character> characters = new List <Character>(); foreach (Grid grid in CharacterList.Items) { CheckBox box = grid.Children[0] as CheckBox; if (box.IsChecked == true) { Character character = box.Tag as Character; characters.Add(character); } } ISchedule[] schedules = plugin.GetSchedule(characters.Count); for (int i = 0; i < schedules.Length && i < characters.Count; i++) { characters[i].AddSchedule(schedules[i]); } } }
public MainWindow() { InitializeComponent(); Title = Tool.GetConfig("NAME"); void Log(string log) { Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => { LogTextBox.Text += log + "\n"; UpdateLayout(); LogTextBox.ScrollToVerticalOffset(LogTextBox.ActualHeight + LogTextBox.VerticalOffset); })); } Tool.Log = Log; List <string> pluginpath = FindPlugin(); foreach (string filename in pluginpath) { try { //获取文件名 string asmfile = filename; string asmname = Path.GetFileNameWithoutExtension(asmfile); if (asmname != string.Empty) { // 利用反射,构造DLL文件的实例 Assembly asm = Assembly.LoadFile(asmfile); //利用反射,从程序集(DLL)中,提取类,并把此类实例化 Type[] t = asm.GetExportedTypes(); foreach (Type type in t) { if (type.GetInterface("ITaskPlugin") != null) { ITaskPlugin plugin = (ITaskPlugin)Activator.CreateInstance(type); MenuItem item = new MenuItem(); item.Header = plugin.name; item.Tag = plugin; item.Click += ITaskPlugin_Click; TaskMenu.Items.Add(item); } else if (type.GetInterface("ISchedulePlugin") != null) { ISchedulePlugin plugin = (ISchedulePlugin)Activator.CreateInstance(type); MenuItem item = new MenuItem(); item.Header = plugin.name; item.Tag = plugin; item.Click += ISchedulePlugin_Click; ScheduleMenu.Items.Add(item); } } } } catch (Exception ex) { Console.Write(ex.Message); } } string info = Tool.GetInfo(); if (info != "") { MessageBox.Show(info); } }