在 Blazor 中使用 Process.Start() 时按钮没有改变的问题
Issues with Button not changing when using Process.Start() in Blazor
我遇到了一个问题,我想在 运行 调用 Process.Start() 时更改按钮文本。
这是我拥有的:
<button class="btn-lg btn- @ButtonClass" disabled="@IsDisabled" @onclick="GenerateReports"><i class="@ButtonIcon"></i> @Button</button>
public partial class Index
{
private string Button { get; set; }
private string ButtonClass { get; set; }
private string ButtonIcon { get; set; }
private bool IsDisabled { get; set; }
protected override void OnInitialized()
{
Button = "Generate Reports";
ButtonClass = "btn-primary";
ButtonIcon = "fas fa-copy";
IsDisabled = false;
}
private Task GenerateReports()
{
try
{
Button = "Please Wait. Reports Being Generated.";
ButtonClass = "btn-secondary";
ButtonIcon = "fas fa-spinner";
IsDisabled = true;
Process process = new Process();
process.StartInfo.FileName = @"\MyServer\E$\ObjectCode\Test.bat";
process.StartInfo.RedirectStandardOutput = false;
process.StartInfo.RedirectStandardError = false;
process.StartInfo.UseShellExecute = false;
process.Start();
process.WaitForExit();
Button = "Reports Generated!";
ButtonClass = "btn-success";
ButtonIcon = "fas fa-check";
return Task.FromResult(true);
}
catch (Exception)
{
throw;
}
}
基本上,我想做的是在禁用按钮的同时更改按钮文本。如果我将 Process 部分注释掉,它就可以正常工作。但是,一旦我 运行 Process 它不会更改按钮也不会禁用它。
为了完成这项工作,我还需要做些什么吗?
提前致谢!
这是因为按钮被禁用并且文本被更改,但是 UI 在 GenerateReports() 退出之前没有更新。
您可以将此函数拆分为两个单独的函数,一个将在启动进程时调用(并将其存储在私有值中),第二个将在进程完成后调用。
对于第二部分,您可以使用此处描述的方法:
How to get notification that a System.Threading.Tasks.Task has completed
我遇到了一个问题,我想在 运行 调用 Process.Start() 时更改按钮文本。 这是我拥有的:
<button class="btn-lg btn- @ButtonClass" disabled="@IsDisabled" @onclick="GenerateReports"><i class="@ButtonIcon"></i> @Button</button>
public partial class Index
{
private string Button { get; set; }
private string ButtonClass { get; set; }
private string ButtonIcon { get; set; }
private bool IsDisabled { get; set; }
protected override void OnInitialized()
{
Button = "Generate Reports";
ButtonClass = "btn-primary";
ButtonIcon = "fas fa-copy";
IsDisabled = false;
}
private Task GenerateReports()
{
try
{
Button = "Please Wait. Reports Being Generated.";
ButtonClass = "btn-secondary";
ButtonIcon = "fas fa-spinner";
IsDisabled = true;
Process process = new Process();
process.StartInfo.FileName = @"\MyServer\E$\ObjectCode\Test.bat";
process.StartInfo.RedirectStandardOutput = false;
process.StartInfo.RedirectStandardError = false;
process.StartInfo.UseShellExecute = false;
process.Start();
process.WaitForExit();
Button = "Reports Generated!";
ButtonClass = "btn-success";
ButtonIcon = "fas fa-check";
return Task.FromResult(true);
}
catch (Exception)
{
throw;
}
}
基本上,我想做的是在禁用按钮的同时更改按钮文本。如果我将 Process 部分注释掉,它就可以正常工作。但是,一旦我 运行 Process 它不会更改按钮也不会禁用它。 为了完成这项工作,我还需要做些什么吗? 提前致谢!
这是因为按钮被禁用并且文本被更改,但是 UI 在 GenerateReports() 退出之前没有更新。
您可以将此函数拆分为两个单独的函数,一个将在启动进程时调用(并将其存储在私有值中),第二个将在进程完成后调用。
对于第二部分,您可以使用此处描述的方法: How to get notification that a System.Threading.Tasks.Task has completed