Пример #1
0
        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]);
                }
            }
        }
Пример #2
0
        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);
            }
        }