用Winform中的委托和线程自制一个加载界面,主界面中点击按钮进入加载界面,加载界面有进度条显示,有资源信息名称显示,加载完成后加载界面关闭,显示正常主界面,并且主界面中textbox中显示加载界面的信息
时间: 2024-03-26 18:39:05 浏览: 57
winform下可方便使用的加载提示窗口
好的,我了解您的需求。按照您的要求,我们可以使用委托和线程来实现一个加载界面。具体步骤如下:
1. 创建一个新的 Winform 窗体,用于显示加载界面。在窗体上添加一个进度条控件和一个标签控件,用于显示资源信息名称。还需要添加一个“取消”按钮。当用户点击“取消”按钮时,应该关闭加载界面,并在主界面中显示取消信息。
2. 在主界面中添加一个按钮,用于打开加载界面。当用户点击该按钮时,应该创建并显示加载界面,并启动一个新的线程来处理加载过程。
3. 在加载线程中,可以使用委托来更新加载界面上的进度条控件和标签控件的值。在每个加载步骤完成后,都应该检查用户是否点击了“取消”按钮,如果是,则线程应该停止执行,并在主界面上显示取消信息。在加载完成后,应该关闭加载界面,并在主界面中显示加载完成信息。
下面是一个简单的示例代码,仅供参考:
```csharp
// 加载界面
public partial class LoadingForm : Form
{
private delegate void UpdateProgressDelegate(int value);
private delegate void UpdateLabelDelegate(string text);
public LoadingForm()
{
InitializeComponent();
}
public void UpdateProgress(int value)
{
if (progressBar.InvokeRequired)
{
UpdateProgressDelegate d = new UpdateProgressDelegate(UpdateProgress);
Invoke(d, new object[] { value });
}
else
{
progressBar.Value = value;
}
}
public void UpdateLabel(string text)
{
if (label.InvokeRequired)
{
UpdateLabelDelegate d = new UpdateLabelDelegate(UpdateLabel);
Invoke(d, new object[] { text });
}
else
{
label.Text = text;
}
}
private void cancelButton_Click(object sender, EventArgs e)
{
Close();
}
}
// 主界面
public partial class MainForm : Form
{
private LoadingForm loadingForm;
public MainForm()
{
InitializeComponent();
}
private void startButton_Click(object sender, EventArgs e)
{
loadingForm = new LoadingForm();
loadingForm.Show();
Thread thread = new Thread(() =>
{
// 模拟加载过程
for (int i = 0; i <= 100; i++)
{
loadingForm.UpdateProgress(i);
loadingForm.UpdateLabel($"正在加载资源 {i}%");
// 模拟加载延迟
Thread.Sleep(100);
if (loadingForm.IsDisposed)
{
break;
}
}
if (loadingForm.IsDisposed)
{
Invoke(new Action(() =>
{
textBox.Text = "加载已取消。";
}));
}
else
{
Invoke(new Action(() =>
{
textBox.Text = "加载完成。";
}));
}
loadingForm.Invoke(new Action(() =>
{
loadingForm.Close();
}));
});
thread.Start();
}
}
```
需要注意的是,这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行更多的优化和改进。
阅读全文