protected override void OnBeforeInstall(IDictionary savedState)
{
base.OnBeforeInstall(savedState);
DialogResult result = DialogResult.None;
if (isExcelIsRunning())
{
result = MessageBox.Show("Excel is still running. Please save your work and close Excel, and then click \"Retry\" button to continue with installation.", "", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning);
}
while (result == DialogResult.Retry)
{
if (!isExcelIsRunning())
{
break;
}
}
}
//check if excel is currently running
private bool isExcelIsRunning()
{
bool flag = false;
Process[] xlProc = Process.GetProcessesByName("excel");
if (xlProc != null)
flag = true;
return flag;
}
以上是我即将用于安装程序类的代码。
我想在这里实现的是我需要安装程序来检查安装过程中当前是否正在运行Excel。如果它正在运行,那么在安装开始时应该有一条弹出消息提醒用户关闭Excel,安装程序应该暂停,直到在进程列表中找不到Excel实例。
回到代码,我不认为while
块是非常正确的,因为如果Excel仍在运行,用户单击“重试”按钮后可能会导致无限循环。
那么更好的方法是什么?这里的任何人都可以看看上面的代码,看看我可以在哪些方面进行改进吗?
答案 0 :(得分:1)
我认为你的代码是这样的:
while(isExcelRunning())
{
var result = MessageBox.Show("Excel is still running. Please save your work and close Excel, and then click \"Retry\" button to continue with installation.", "", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning);
if (result != DialogResult.Retry)
{
//Handle Cancel
break;
}
}
这将继续在循环中显示警报,直到Excel退出,或者按下取消,您可以在此处执行任何操作;然后我们退出循环(或者你可以完全退出方法)。
此处的关键是重复显示警报,直到Excel消失或他们选择取消。如果你需要在循环后根据响应做一些代码;也许是这样的:
var userHasCancelled = false;
while(!userHasCancelled && isExcelRunning())
{
var result = MessageBox.Show("Excel is still running. Please save your work and close Excel, and then click \"Retry\" button to continue with installation.", "", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning);
if (result != DialogResult.Retry)
{
userHasCancelled = true;
}
}
if (userHasCancelled)
{
//User cancelled...
}
else
{
//Continue.
}