我正在尝试编写一个可用于启动另一个程序的程序。我有一个按钮,当它被点击时,我想启动一个程序,并记录该程序已经启动。当我开始一个新程序时,我想首先检查一下我是否还没有启动该程序 - 如果有,请先关闭现有实例(因此最多只能存在一个程序实例) )。
我已经编写了以下代码:
private void button1_Click(object sender, EventArgs e)
{
bool status = false;
if (status != true)
{
status = true;
System.Diagnostics.Process.Start("C:\\Users\\David\\Desktop\\Test\\Test.exe");
}
}
现在我的问题是,如果我点击按钮,变量将设置为false
,如第一行所示。我怎么能正确地做到这一点?另外,如果status设置为true,我如何返回0?
答案 0 :(得分:1)
如果要在调用中保留其值,请将bool
变量的声明移到方法之外:
bool status = false;
Process myProcess;
private void button1_Click(object sender, EventArgs e) {
if (status != true) {
myProcess = new Process()
myProcess.EnableRaisingEvents = true;
status = true;
// Start a process to print a file and raise an event when done.
myProcess.StartInfo.FileName = "C:\\Users\\David\\Desktop\\Test\\Test.exe";
myProcess.Exited += new EventHandler(Process_Exited);
myProcess.Start();
}
}
private void Process_Exited(object sender, System.EventArgs e) {
status = false;
}
现在诊断消息只会在您的对象的每个生命周期出现一次。退出流程后,status
会重置为false
,让您再次点击该按钮。
另请注意,由于按钮在状态设置为true
后没有执行任何操作,因此最好禁用它以避免混淆最终用户。
答案 1 :(得分:0)
问题是你在click_button事件中声明变量,因此无法在方法“click_button”之外到达变量
尝试使用类似的东西
bool status = false;
int ChangeStatus()
{
if(status!=true)
{
status = true;
System.Diagnostics.Process.Start("C:\\Users\\David\\Desktop\\Test\\Test.exe");
return 0;
}
return 1; //if the status is false it will return 1 or the value you want
}
然后在Button_Click事件中添加
private void button1_Click(object sender, EventArgs e) {
//I don't know where you will display or save the value (0 or 1) I will assign it in a variable
var result = ChangeStatus();
}
希望它可以帮到你