我正在借助数据库中的数据动态生成一些标签。然后我向这些动态生成的标签添加了一些事件。我正在尝试在新线程中运行标签的点击事件。但到目前为止我还想不通。任何线索都会非常有帮助。
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
}
最佳答案
嗯,最简单的方法是更改方法的签名并使用 closure :
Thread t = new Thread(() => ThreadedMethodForCalc(MyLabel));
t.Start();
...
private void ThreadedMethodForCalc(Label myLabel)
{
}
顺便说一下,要在另一个线程中更新 UI,您可以使用 Control.Invoke(...)
。
更多信息请查看this article来自 MSDN。
关于c# - 标签单击事件以在 C# 中的新线程上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58914869/