gpt4 book ai didi

c# - WPF C# 长时间运行操作

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:41 26 4
gpt4 key购买 nike

基本上我遇到了 wpf 中的 c# 线程问题以及如何正确使用它们。

起初我遇到了我的应用程序由于长时间运行而挂起的情况。在研究了如何解决这个问题之后,我决定使用 Dispatcher BeginInvoke 方法并将正在运行的操作放在它自己的线程上。然而,必须发送到 UI 线程的代码量太多,无济于事。

这是我正在做的导致挂起的简化版本:

for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 100; j++)
{
for (int k = 0; k < 100; k++)
{
Image image = new Image();

// ... Do stuff with image here

Binding binding = new Binding();

// ... Bind some properties to the image

// Add the image to a list and a canvas
List.Add(image);
SomeCanvas.Children.Add(image);
}
}
}

如您所见,操作中的大部分处理都包含使用控件。因此必须将它们异步分派(dispatch)到 UI 线程。这样做之后,基本上所有操作都在 UI 线程上进行,应用程序再次挂起:/

关于我在这种情况下可以做什么的任何建议?非常感谢

最佳答案

在一个紧凑的循环中创建如此多的视觉对象肯定会很慢。或许您可以尝试将其分为两个阶段。在你的紧密循环中,你只需为图像创建一个占位符。说一个带有填充颜色的矩形来指示将来图像将显示的位置。

然后在另一组线程中,您实际加载图像的内容并设置绑定(bind)。这样,用户界面始终保持响应。用户立即看到占位符,然后在实时加载时看到实际图像替换占位符。您经常会在网页上看到这种情况,下载时占位符会被实际内容填满。

关于c# - WPF C# 长时间运行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7640806/

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