C# 弹出Loading遮罩层
时间: 2024-10-27 07:03:48 浏览: 15
在C#中,通常使用Windows Forms或WPF应用程序时,为了显示加载提示或者进度条,可以在需要暂停用户交互的操作开始时弹出一个"Loading"(加载中)的遮罩层。这可以提供用户体验的良好反馈,让用户知道程序正在处理某些任务。
对于Windows Forms应用,你可以这样做:
```csharp
private void ShowLoadingForm()
{
Form loadingForm = new LoadingForm();
// 遮罩样式可以根据需求自定义
loadingForm.FormBorderStyle = FormBorderStyle.None;
loadingForm.StartPosition = FormStartPosition.CenterParent;
loadingForm.ShowDialog();
}
class LoadingForm : Form
{
public LoadingForm()
{
// 添加内容比如加载图标、文本等
// 可能还会设置透明度或背景颜色
BackgroundColor = Color.Gray;
TransparencyKey = Color.Transparent;
Controls.Add(new Label { Text = "加载中..." });
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x0200; // 设置WS_EX_LAYERED并获取额外的窗口属性
return cp;
}
}
[DllImport("user32.dll")]
private static extern IntPtr SetLayeredWindowAttributes(IntPtr hWnd, uint crKey, byte bAlpha, uint dwFlags);
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// 设置半透明效果
SetLayeredWindowAttributes(Handle, 0x00FFFFFF, 150, LayeredWindowAttributes.LWA_COLORKEY);
}
}
```
在WPF中,你可以使用`Popup`控件加上一个`ProgressBar`或者`TextBlock`来达到类似的效果:
```csharp
private async void StartLoading()
{
Popup popup = new Popup();
Grid loadingGrid = new Grid();
loadingGrid.Children.Add(new ProgressBar() { IsIndeterminate = true });
loadingGrid.Children.Add(new TextBlock { Text = "加载中..." });
popup.Child = loadingGrid;
popup.IsOpen = true;
try
{
await LongRunningTaskAsync();
}
finally
{
popup.IsOpen = false;
}
}
async Task LongRunningTaskAsync()
{
// 执行耗时操作...
}
```
阅读全文