[英]c# wpf Progress bar in different window
我试图弄清楚如何在我的应用程序中使用进度条。 我有一个注销表单作为主窗口。 我想要进度条的另一个窗口。 在我的主窗口代码中,有15秒的睡眠时间。 我希望用户在进度栏中看到进度,如果15秒完成,则需要关闭进度栏。 我想知道是否可以将进度条的代码放入主窗口代码中。 或者也许是一种让进度条与15秒等待时间交互的方法。
我是编码的新手,所以解释代码对我理解代码很有帮助。
提前致谢。
我的代码在进度栏窗口中:
public partial class ProgressBar : Window
{
public ProgressBar()
{
InitializeComponent();
}
private void Window_ContentRendered(object sender, EventArgs e)
{
for (int i = 0; i <= 15; i++)
{
pbStatus.Value++;
System.Threading.Thread.Sleep(1000);
}
}
}
我的progressbar.xaml:
<Window x:Class="Sessie_Afmeld_Applicatie.ProgressBar"
WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Sessie_Afmeld_Applicatie"
mc:Ignorable="d"
Title="Voortgang" Height="100" Width="300">
<Grid>
<ProgressBar Minimum="0" Maximum="150" Name="pbStatus" Margin="25,23,37,23" Foreground="#FF13B931" ValueChanged="pbStatus_ValueChanged" />
<Label Content="Label" HorizontalAlignment="Left" Margin="125,66,0,0" VerticalAlignment="Top"/>
</Grid>
</Window>
如果您希望在此期间能够与应用程序进行交互,则无法入睡或执行其他阻止UI线程的操作。
您应该在后台线程上执行任何繁重且可能长时间运行的工作。 在您的特定示例中,可以使用Task.Delay
方法异步等待:
public partial class ProgressBar : Window
{
public ProgressBar()
{
InitializeComponent();
}
private async void Window_ContentRendered(object sender, EventArgs e)
{
for (int i = 0; i < 15; i++)
{
pbStatus.Value++;
await Task.Delay(1000);
}
Close();
}
}
如果调用服务方法或类似方法,则可以使用任务并行库(TPL)并启动一个新Task
。 但是,这是一个很大的话题。 请参考MSDN以获取更多信息: https : //docs.microsoft.com/zh-cn/dotnet/standard/parallel-programming/task-parallel-library-tpl 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.