gpt4 book ai didi

c# - 理解代表

转载 作者:太空狗 更新时间:2023-10-30 00:36:34 24 4
gpt4 key购买 nike

这不是我第一次遇到代表,我和上次以及上次一样感到困惑。因此,我想一劳永逸地解决 delgate-confusion。

我的问题如下

有一个只显示带有一些项目的 ListView 的图形用户界面,我想从需要一些时间的数据连接加载数据,以增加使用应用程序的舒适度,我实例化了一个 BackgroundWorker 并在 doWork -方法我想获取数据并显示它。

这是我想要的

  • 创建 BackgroundWorker 并将 doWork_fetchData() 方法指定给 doWork 事件
  • 调用我的 Worker 实例的 Async 方法
  • 在下载数据期间更新 ListView 而用户界面不会“卡住”。

现在这是跨线程调用,我想通过委托(delegate)来解决这个问题,这让我来到了这里。正在关注this tutorial ,我有一个工作委托(delegate),但是它没有解决问题,在我的委托(delegate)中我无法更改我的 ListView,它仍然说它在另一个线程上。

我想找到关于委托(delegate)的简单说明以及如何使用它们来解决我的问题。另外,我应该考虑或设计我的软件吗?

最佳答案

通常 BackgroundWorker 使用 ReportProgress 与 UI 线程通信.在启动后台工作程序之前,您可以连接一个委托(delegate)来接收这些进度事件,然后进度将在 UI 线程上报告,您可以在其中安全地更改 ListView

Windows 窗体中的另一种选择是调用 Control.InvokeControl.BeginInvoke ,传递一个将更新 UI 的委托(delegate)。该委托(delegate)将在 UI 线程上执行。有关此示例,请参阅 my threading tutorialJoe Albahari's .

这在 WPF 中的等价物是 Dispatcher - 再次,InvokeBeginInvoke .您可以使用 Dispatcher 访问控件的调度程序属性(property)。

关于c# - 理解代表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1459073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com