c# 其他线程如何等待主线程创建完成ui界面以后在在textbox种打印文字。
时间: 2024-10-29 13:18:45 浏览: 16
c#在多线程中访问Form中控件的多种解决方案
4星 · 用户满意度95%
在C#中,如果你有一个辅助线程需要等待主线程的UI界面初始化完成后才执行某些操作,比如向TextBox写入文本,你可以利用`TaskCompletionSource`或者`BlockingCollection`配合同步锁来实现这个场景。下面是一个简单的示例:
```csharp
public partial class MainForm : Form
{
private object _syncLock = new object();
private bool _isInitialized;
public MainForm()
{
InitializeComponent();
InitializeUI(); // 在构造函数或适当的时机初始化UI
}
private void InitializeUI()
{
_isInitialized = true;
lock (_syncLock)
{
Monitor.Pulse(_syncLock);
}
}
// 在你需要写入TextBox的地方
private void WriteToTextBoxAsync()
{
if (!_isInitialized) return; // 确保UI已经初始化
Task.Run(async () =>
{
await Task.Factory.StartNew(() =>
{
// 这里等待锁释放
lock (_syncLock)
{
while (!_isInitialized) Monitor.Wait(_syncLock); // 当UI初始化完成,唤醒线程
}
// UI线程现在可以安全地访问
textBox.Text = "UI初始化完成";
});
});
}
}
```
在这个例子中,`InitializeUI`方法在UI初始化后设置标志,并通过锁定`_syncLock`释放,让等待的线程知道可以继续。`WriteToTextBoxAsync`在线程启动后检查是否初始化完成,如果没有就等待,直到UI初始化完成后再写入文本。
阅读全文