如何在c#中逐个运行多个方法

时间:2015-10-29 05:06:47

标签: c#

我在课堂上有50到70种方法。现在我想逐个运行所有这些方法。表示如果method1完成则method2启动,method2结束,然后method3启动。任何指导从哪里开始?

5 个答案:

答案 0 :(得分:2)

这样做:

void Main()
{
    var obj = new Something();
    var methods = obj.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public 
                                      | BindingFlags.DeclaredOnly | BindingFlags.Static);
    foreach (var method in methods)
    {
        method.Invoke(obj, null);
    }
}

public class Something {
    public void TestA() { Console.WriteLine("Running A"); }
    public void TestB() { Console.WriteLine("Running B"); }
    public void TestC() { Console.WriteLine("Running C"); }
    public void TestD() { Console.WriteLine("Running D"); }
    public static void TestE() { Console.WriteLine("Running E"); }
}

产量

Running A
Running B
Running C
Running D
Running E

当然,只适用于不带参数的方法。

由于M.kazem Akhgary的建议,添加了静态方法

答案 1 :(得分:1)

试试这个..

//place this code under an event

Thread th;
th = new thread(AllMethods);
th.start();
//

//Create a function calling all functions
void AllMethods()
{
    MethodA();
    MethodB();
    .
    .
    .
}

答案 2 :(得分:0)

使用Reflection但我不确定它是否会以正确的顺序执行。如果您的方法名称是按字母顺序定义的,那么它可能会以您希望的方式运行。

答案 3 :(得分:0)

不要担心只是创建一个逐个调用所有类方法的函数,没有系统崩溃问题.. 在这个函数控件中,从上到下调用​​方法不需要字母顺序,意味着只需按顺序放置方法

void FnCallingAllMethods()
 {
 Method1();
 Method2();
 Method3(); 
. 
. 
. 
}

在这些序列中,当一个方法成功完成后,控制跳转到另一个方法。

答案 4 :(得分:0)

是的,罗布说。只需将“Console.WriteLine ...”替换为您想要执行的操作,一切顺利。您还可以无限期地继续添加到列表中。但是,正如Rob所说,此选项不适用于参数。

因此,另一个选择是创建单个程序并创建一个主程序,它将按顺序执行所有程序。比如说,您想要创建一个文本文档,列出文件夹中的所有文件;那么你想要一个程序(或方法)通过电子邮件发送该列表。

如果列表尚未完成生成,您当然不希望第二个程序尝试通过电子邮件发送列表。所以你需要一个“WaitForExit”选项。在下面的代码中,我创建了5个程序。四个独立执行4个不同任务的程序,以及一个连续触发其中每个任务的主程序。

再次添加或删除项目所需的部分。  谢谢,我希望这可以帮助将来的某个人。

附注:在Visual Studio中创建程序后,运行“工具”下的“构建”选项,然后运行“批量构建”(也在“工具”下)。这将生成您需要的“.exe”文件。

享受。

using System;
using System.Diagnostics;

namespace CallMultipleMethods2
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Start first application.
                Process firstProc = new Process();
                firstProc.StartInfo.FileName = "c:/MyPrograms/program1.exe";
                firstProc.EnableRaisingEvents = true;

                firstProc.Start();

                firstProc.WaitForExit();

                //You may want to perform different actions depending on the exit code.
                Console.WriteLine("First process completed: " + firstProc.ExitCode);
                // End of first application

                // Start second application
                Process secondProc = new Process();
                secondProc.StartInfo.FileName = "c:/MyPrograms/program2.exe";
                secondProc.Start();

                secondProc.WaitForExit();

                Console.WriteLine("Second process completed: " + secondProc.ExitCode);
                // End of second application

                // Start third application
                Process thirdProc = new Process();
                thirdProc.StartInfo.FileName = "c:/MyPrograms/program3.exe";
                thirdProc.Start();

                thirdProc.WaitForExit();

                Console.WriteLine("Third process completed: " + thirdProc.ExitCode);
                // End of third application

                // Start fourth application
                Process fourthProc = new Process();
                fourthProc.StartInfo.FileName = "c:/MyPrograms/program4.exe";
                fourthProc.EnableRaisingEvents = true;

                fourthProc.Start();

                fourthProc.WaitForExit();

                Console.WriteLine("Fourth process completed: " + fourthProc.ExitCode);
                // End of fourth application
            }

            // catch on error
            catch (Exception ex)
            {
                Console.WriteLine("An error occurred!!!: " + ex.Message);
                return;
            }
        }
    }
}