我正在尝试编写一个可用于启动另一个程序的程序。我有一个按钮,当它被点击时,我想启动一个程序,并记录程序已经启动。当我开始一个新项目时,我想先检查一下我是否还没有开始该项目—如果有,请先关闭现有实例(这样一次最多会存在一个程序实例(。
我已经写了以下代码:
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
,正如您在第一行中看到的那样。我怎样才能正确地做?此外,如果状态设置为true,如何返回0?
如果您想在调用之间保留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
后,该按钮不会执行任何操作,因此最好禁用它,以避免混淆最终用户。
问题是您在click_button事件中声明变量,因此无法在方法"click_bbutton"之外访问该变量
试试这种
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();
}
希望它能帮助你