【发布时间】:2020-03-13 20:10:40
【问题描述】:
我在数据库数据的帮助下动态生成一些标签。然后我为这些动态生成的标签添加了一些事件。我正在尝试在新线程中运行标签的点击事件。但到目前为止我无法弄清楚。任何线索都会非常有帮助。
private void LoadData(string DeviceCode)
{
//here i am generating the labels (not shown)
//adding the event handler
lb_DeviceData[i].Click += new EventHandler(CalculateClick);
lb_DeviceData[i]..Tag = i;
}
private void CalculateClick(object sender, EventArgs e)
{
Label MyLabel = (Label)sender;
Thread t = new Thread(ThreadedMethodForCalc); //can i pass MyLabel into this method?
t.Start();
}
private void ThreadedMethodForCalc()
{
//complex calculation here
// is it possible to pass 'MyLabel' in this method
}
【问题讨论】:
-
是您将 MyLabel 值传递给另一个函数的问题,还是您不知道如何为这些标签动态创建点击事件的问题?
-
这段代码做了什么你不想要的?还是不按你的意愿去做?
-
你可以将控件传递给你想要的,你也可以将它保存到静态变量中,每个线程都可以访问它。没问题。但是与该控件进行通信可能会变得困难,因为您只能从创建控件的线程中调用该控件的方法。这可以处理,但这是一项额外的工作。 (检查控件的 InvokeRequired 属性)
-
我认为使用 async/await 将是一个可行的选择。你需要用
MyLabel做什么?设置文本?那么您可能希望将 IProgress 与 async/await Task 一起使用 ... -
@rory.ap 我不知道 OP 的技能水平。这是一种替代方案,我个人认为它比在这种情况下使用线程更具可读性和直接性一百万倍。但无论如何,这不是问题的答案。只是想指出,还有另一条可以遵循的路线。
标签: c# multithreading