示例#1
0
文件: Worker.cs 项目: x0rh/Reactofus
        private static List <MethodInfo> GetMethods(DefaultWorker worker)
        {
            List <MethodInfo> result = new List <MethodInfo>();

            var methods = worker.GetType().GetMethods();

            foreach (var method in methods)
            {
                if (method.ReturnType == worker.GetType())
                {
                    result.Add(method);
                }
            }

            return(result);
        }
示例#2
0
文件: Worker.cs 项目: x0rh/Reactofus
        private static void WorkerStart(DefaultWorker worker)
        {
            Thread.CurrentThread.Priority = ThreadPriority.Highest;

            Program.MainWnd.Working = true;

            var  methods       = GetMethods(worker).ToArray();
            bool errorHappened = false;

            Prepare();

            for (int i = 0; i < methods.Length; i++)
            {
                Program.MainWnd.SetProgressFromValues(i + 1, methods.Length);
                Program.MainWnd.SetStatus(GetFriendlyName(methods[i].Name));

                try
                {
                    worker.Check();

                    methods[i].Invoke(worker, new object[] { });
                }
                catch (TargetInvocationException ex)
                {
                    ErrorHandler(ex.InnerException);
                    errorHappened = true;

                    break;
                }
            }

            if (!errorHappened)
            {
                Done();
            }

            Program.MainWnd.SetProgress(0);
            Program.MainWnd.SetStatus("Ready!");

            Program.MainWnd.Working = false;
        }