C# 举例说明如何在线程外关闭线程中打开的form
时间: 2024-11-09 10:21:08 浏览: 15
c#多线程中子线程动态改变ui控件
在C#中,如果你在一个单独的线程中打开了一个Form,通常你会希望在主线程中控制这个Form的行为,包括关闭它。为了避免直接修改正在运行的线程,你可以通过事件或者委托的方式来通知主线程。以下是一个简单的示例:
```csharp
// 创建一个用于关闭Form的委托
private delegate void CloseFormDelegate();
// 在线程中打开并显示Form
Thread openThread = new Thread(new ThreadStart(() =>
{
MainForm form = new MainForm();
form.Show(); // 在子线程中显示Form
// 发布一个事件,告诉主线程我们想要关闭Form
MainForm.CloseEvent += (sender, e) => Application.Run((CloseFormDelegate)Delegate.CreateDelegate(typeof(CloseFormDelegate), null, "CloseForm"));
}));
openThread.Start(); // 启动子线程
// 在主线程中处理关闭Form的请求
public static void CloseForm()
{
if (form.InvokeRequired)
form.Invoke(new CloseFormDelegate(MainForm.Close));
else
form.Close(); // 关闭Form
}
// 当需要关闭Form时,在主线程中触发事件
form.CloseEvent(this, EventArgs.Empty);
```
在这个例子中,`MainForm.CloseEvent` 是自定义的一个事件,当线程想关闭Form时会引发。`CloseForm` 方法是一个静态方法,作为委托存储在 `Delegate.CreateDelegate` 中,以便主线程可以通过 `Application.Run` 来调用它。
阅读全文