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