这是我想要做的。它是一个C#ASP页面。
以下是导入按钮的代码:
Process[] pDTExport = Process.GetProcessesByName("DTImport");
if (pDTExport.Length != 0)
{
prgStatus.Visible = false;
txtStatus.Text = "Unable to import data: another import process is already running. Please wait for it to finish before trying again.";
txtStatus.ForeColor = Color.Red;
}
else
{
txtStatus.Text = "The import process is running..."; <-- Issue here
LaunchExe();
}
我是如何启动exe的:
private void LaunchExe()
{
string exePath = Server.MapPath("~/App_Data/DTImport.exe");
if (File.Exists(exePath))
{
Process pImport = new Process();
pImport.StartInfo.FileName = exePath;
pImport.StartInfo.Arguments = "-d " + txtDate.Text;
pImport.Start();
pImport.WaitForExit();
txtStatus.Text = "Done!";
txtStatus.ForeColor = Color.Green;
prgStatus.Visible = false;
}
else
{
txtStatus.Text = "DTImport.exe was not found in /AppData/"
txtStatus.ForeColor = Color.Red;
prgStatus.Visible = false;
}
}
我遇到的问题是在启动exe之前更新前端。我希望它能做到这一点:点击按钮 - &gt;显示正在运行的消息 - &gt;启动exe。
目前,当我点击按钮时,exe会运行,但我从未看到&#34;导入过程正在运行&#34;消息,只是&#34;完成!&#34;完成之后。
我知道这是因为
行pImport.WaitForExit();
正在阻止主线程。我尝试在ViewState
事件中存储/读取Page_Load
变量,尝试通过按钮启动回发导致的exe,但它没有工作。如何在exe运行之前如何更新UI?
答案 0 :(得分:1)
您可以将事件处理程序注册到pImport.Exit事件。这允许您避免waitForExit。在已注册的方法中,您可以管理导入完成的更新。