gpt4 book ai didi

c# - 多线程任务更新 1 个进度条 - UI C# WPF

转载 作者:行者123 更新时间:2023-12-02 18:47:42 27 4
gpt4 key购买 nike

我一直在四处寻找有类似问题的人,但没有找到任何东西。我正在使用 WPF UI 编写 C# 应用程序。

要更新进度条,我无法像以前(在 CLI 中)那样使用多线程,因为它告诉我,如果 UI 元素不是来自主线程,则无法更新它。

一种解决方案是创建后台工作人员。我已经实现了这个解决方案并且效果很好,但是我希望将任务分配给更多的工作人员/线程(多线程),以便提高效率。

我不知道我要走的方向。如果有人能指导我解决这个问题,那就更受欢迎了。

这是我的代码:(用于使用 MVVM 模式进行编码,只是在这里粘贴我的代码,这对您来说更简单)

public partial class testFunctionTaskPanel: Page
{
private BackgroundWorker backgroundWorker1 = new BackgroundWorker();

private string myURL;

public testFunctionTaskPanel()
{
InitializeComponent();
}

private void startButton_Click(object sender, RoutedEventArgs e)
{
myURL = myURL.Text;

myResults.Items.Clear();
myResults.Items.Add("----Starting----");

backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.ProgressChanged += ProgressChanged;
backgroundWorker1.DoWork += DoWork;
backgroundWorker1.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
backgroundWorker1.RunWorkerAsync();
}

private void DoWork(object sender, DoWorkEventArgs e)
{
int length = myLoadedList.Items.Count;


for (int i = 1; i <= length; i++)
{
try
{
HttpRequest req = new HttpRequest();
req.Proxy = null;
req.ConnectTimeout = 5000;
req.IgnoreProtocolErrors = true;

string get = myURL + myLoadedList.Items[i].ToString();
var response = req.Get(get);

if (response.StatusCode == Leaf.xNet.HttpStatusCode.OK)
{
this.Dispatcher.Invoke(() =>
{
myResults.Items.Add(myLoadedList.Items[i].ToString());
});
}
}
catch{}
backgroundWorker1.ReportProgress(i);
}
}

private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
myResults.Items.Add("----Finish----");
}

private void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// This is called on the UI thread when ReportProgress method is called
progressbar.Value = e.ProgressPercentage;
}
}

最佳答案

您可以使用Dispatcher.Invoke():

Dispatcher.Invoke(() =>
{
// Your code here
});

当您在线程或任务中时,只需调用此函数并将 UI 更新代码粘贴到其中即可。

关于c# - 多线程任务更新 1 个进度条 - UI C# WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67215577/

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