我希望将一些数据传递给Process
对象的委托方法,当它触发Exited
事件时 - 我不确定如何。
我有一些代码(在Windows服务中)需要一段时间......所以我要求一个新程序来做...就像...
string recipientEmail = "whatever@blah.com";
var commandProcess = new Process
{
StartInfo =
{
FileName = commandLine,
Arguments = commandArgs
}
};
commandProcess.Start();
现在,当这完成时,我希望做一些其他的事情。例如,发送电子邮件。
现在,我们可以做到这一点并不太难: -
commandProcess.EnableRaisingEvents = true;
// Method to handle when the process has exited.
commandProcess.Exited += CommandProcess_Exited;
现在,我不确定在recipientEmail
事件被触发时我如何将变量CommandProcess_Exited
传递给方法Exited
。
例如CommandProcess_Exited
方法将调用的方法: -
private static void SendEmailToRecipient(string recipientEmail)
{
....
}
这可能吗?
答案 0 :(得分:4)
您可以将变量设置为非局部变量,即在类中声明它,使其对事件处理方法可见。
或者您可以使用委托并编写内联方法,这样您就可以访问本地变量:
commandProcess.Exited += delegate
{
SendEmailToRecipient(recipientEmail);
};
答案 1 :(得分:1)
对于类似这样的事情,我倾向于扩展EventArgs类并创建我自己的版本,其中包含所需的数据:
public class MyProgramEventArgs : EventArgs
{
public MyProgramEventArgs()
{
}
public string RecipientEmail { get; set; }
}
然后你可以做的是从程序本身捕获Exited
,对args做一些预处理,然后调用方法:
public static void Main(string[] args)
{
commandProcess.EnableRaisingEvents = true;
...
commandProcess.Exited += OnProgramExited;
}
public void OnProgramExited(object sender, EventArgs e)
{
MyProgramEventArgs args = new MyProgramEventArgs();
args.RecipientEmail = "whatever@blah.com";
CommandProcess_Exited(sender, args);
}
public void CommandProcess_Exited(object sender, MyProgramEventArgs e)
{
SendEmailToRecipient(e.RecipientEmail);
}