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); } }