用Winform中委托和线程自制一个加载界面,主界面中点击按钮进入加载界面,加载界面有进度条显示,有资源信息名称显示,加载完成后加载界面关闭,显示正常主界面,并且主界面中textbox中显示加载界面的信息
时间: 2024-03-26 15:38:30 浏览: 57
好的,我明白了你的要求。下面是实现的步骤:
1. 在 Winform 中新建一个窗体作为加载界面,在该界面中添加一个进度条和一个标签用于显示资源信息名称。
2. 在主界面中添加一个按钮,点击该按钮启动一个新线程,该线程负责加载资源并更新进度条和资源信息名称的显示。
3. 在主界面中添加一个 TextBox 控件用于显示加载界面的信息。
4. 使用委托在新线程中更新加载界面的进度条和资源信息名称的显示。
5. 加载完成后,关闭加载界面并在主界面中显示正常界面。
下面是代码示例:
```csharp
// 加载界面代码
public partial class LoadingForm : Form
{
public delegate void UpdateProgressDelegate(int value);
public delegate void UpdateLabelDelegate(string text);
public LoadingForm()
{
InitializeComponent();
}
public void UpdateProgress(int value)
{
if (InvokeRequired)
{
Invoke(new UpdateProgressDelegate(UpdateProgress), value);
return;
}
progressBar1.Value = value;
}
public void UpdateLabel(string text)
{
if (InvokeRequired)
{
Invoke(new UpdateLabelDelegate(UpdateLabel), text);
return;
}
label1.Text = text;
}
}
// 主界面代码
public partial class MainForm : Form
{
private LoadingForm loadingForm;
public MainForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// 创建新线程
Thread thread = new Thread(new ThreadStart(LoadResources));
thread.Start();
// 显示加载界面
loadingForm = new LoadingForm();
loadingForm.Show();
}
private void LoadResources()
{
for (int i = 0; i <= 100; i++)
{
// 模拟加载资源
Thread.Sleep(50);
// 更新进度条
loadingForm.UpdateProgress(i);
// 更新资源信息名称
loadingForm.UpdateLabel(string.Format("正在加载资源{0}...", i));
// 在主界面中显示加载界面的信息
UpdateTextBox(string.Format("正在加载资源{0}...\r\n", i));
}
// 关闭加载界面并显示正常界面
loadingForm.Close();
MessageBox.Show("资源加载完成!");
}
private void UpdateTextBox(string text)
{
if (textBox1.InvokeRequired)
{
textBox1.Invoke(new Action<string>((s) => {
textBox1.AppendText(s);
}), text);
}
else
{
textBox1.AppendText(text);
}
}
}
```
希望这个示例能帮助你实现你的要求。
阅读全文