c# - 标签单击事件以在 C# 中的新线程上运行

标签 c# multithreading

我正在借助数据库中的数据动态生成一些标签。然后我向这些动态生成的标签添加了一些事件。我正在尝试在新线程中运行标签的点击事件。但到目前为止我还想不通。任何线索都会非常有帮助。

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/

相关文章:

c# - 检测图片上物体的角

c# - 如何在 dll 项目中用 C++ 创建命名空间和构造函数?

c# - .Wait() 和 .GetAwaiter().GetResult() 有什么区别?

visual-studio - 如何在 Visual Studio 中调试线程池?

c# - LINQ to Entities 无法识别该方法并且无法将此方法转换为存储表达式

c# - 使用 AsCacheQueryable 和通用查询性能高效地从 Ignite 获取数据

c# - 从 C# 调用 C++ DLL

c++ - 与 openmp 的 10 维蒙特卡洛集成

python - python中的多线程 - 阻止调用在后台运行

linux - 从多个线程调用 accept()