C#中我有一个用户控件,控件中有文本框A、按钮B、Thread线程C。我在用户控件中点击B,程序会进入C,C执行完成后将结果输入A。现在我在窗体中循环生成了多个用户控件,需要分别点击各个用户控件的B后将结果返回至对应的A中。
时间: 2024-04-07 14:33:35 浏览: 60
您可以通过使用`Task`和`async/await`来实现这个需求。首先,在用户控件中定义一个异步方法,用于执行耗时操作。然后,在窗体中循环生成多个用户控件,并订阅按钮点击事件,在事件处理程序中调用异步方法并将结果返回到对应的文本框中。
下面是一个示例代码,演示了如何实现这个功能:
在用户控件中:
```C#
public partial class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
}
public async Task<string> DoTimeConsumingTaskAsync()
{
// 模拟耗时操作
await Task.Delay(3000);
return "耗时操作的结果";
}
}
```
在窗体中:
```C#
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 循环生成多个用户控件
for (int i = 0; i < 5; i++)
{
MyControl userControl = new MyControl();
userControl.ButtonClick += UserControl_ButtonClick;
flowLayoutPanel1.Controls.Add(userControl);
}
}
private async void UserControl_ButtonClick(object sender, EventArgs e)
{
MyControl userControl = (MyControl)sender;
// 执行耗时操作并获取结果
string result = await userControl.DoTimeConsumingTaskAsync();
// 将结果返回到对应的文本框中
userControl.TextBoxA.Text = result;
}
}
```
在这个示例中,窗体中的`flowLayoutPanel1`用于容纳多个用户控件。在窗体的加载事件中,我们循环创建多个用户控件,并订阅每个用户控件的按钮点击事件。当按钮被点击时,会触发事件处理程序,其中我们调用用户控件的异步方法来执行耗时操作,并等待操作完成后将结果返回到对应的文本框中。
请根据您的实际情况进行调整和修改。希望这可以帮助到您!
阅读全文