gpt4 book ai didi

c# - 使用内部类中存在的值更新进度条

转载 作者:行者123 更新时间:2023-11-30 16:24:37 26 4
gpt4 key购买 nike

下面的两个代码段在不同的命名空间中。第二个代码的访问修饰符是内部的。我在那里做一些操作,我想计算百分比并在 MgmntApp 进度条中更新。我该怎么做?

WpfApplication1

MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Height="204">
<ProgressBar Height="35" HorizontalAlignment="Left" Margin="57,83,0,0" Name="progressBar1" VerticalAlignment="Top" Width="346" />
</Grid>
</Window>

我想在下面的类中执行长时间运行的操作时更新进度条的值。

Different

FileParser.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Different
{
/// <summary>
/// </summary>
internal class FileParser:ImageFileParser
{
ImageFileParser.GenerateCmds()
{
percentage=change; //0 to 100
//long time operation
}
}
}

最佳答案

如果解析需要很长时间,您可能希望在单独的线程上运行它。

您可以在进度更改时在 FileParser 上引发一个事件并在 MainWindow 中订阅此事件:

private void StartParsing()
{
FileParser fp = new FileParser("FileName.txt");
fp.ProgressChanged += FileParser_ProgressChanged;
Thread t = new Thread(fp.GenerateCmds);
t.Start();
}

private void FileParser_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// switch to the UI thread if fileparser is running on a different thread
Dispatcher.BeginInvoke(new Action(
() => { progressbar.Value = e.ProgressPercentage; }));
}

要做到这一点,您需要将事件添加到 FileParser:

internal class FileParser:ImageFileParser
{
internal event EventHandler<ProgressChangedEventArgs> ProgressChanged;

ImageFileParser.GenerateCmds()
{
percentage=change; //0 to 100
OnProgressChanged(percentage);
//long time operation
}

internal protected void OnProgressChanged(int percentage)
{
var p = ProgressChanged;
if(p != null)
{
p(this, new ProgressChangedEventArgs(percentage, null));
}
}
}

关于c# - 使用内部类中存在的值更新进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10696951/

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