gpt4 book ai didi

C# 进度条和文本框不更新

转载 作者:太空宇宙 更新时间:2023-11-03 13:21:36 24 4
gpt4 key购买 nike

我在这里看到了一些很好的答案,想知道是否有人可以帮助我。

这是我的代码:

namespace expandGUIWPF
{

public static string getSHA256b64(string filepath)
{
byte[] bytes = SHA256.Create().ComputeHash(File.ReadAllBytes(filepath));
return Convert.ToBase64String(bytes);
}

private void btnRun_Click(object sender, RoutedEventArgs e)
{
{
string folder = txtFolder.Text;
string filelist = folder + "\\FileList.txt";
string[] test = Directory.GetFiles(folder, "*", System.IO.SearchOption.AllDirectories);
File.WriteAllLines(filelist, test);


int length = File.ReadLines(filelist).Count();
pBar1.Minimum = 1;
pBar1.Maximum = length;

File.WriteAllLines(filelist, test);

using (StreamReader sr = new StreamReader(filelist))
{
string line;
while ((line = sr.ReadLine()) != null)
{
string oldfile = line;
string newfile = oldfile + ".expanded";
string oldhash = "";
string newhash = "";

try
{
ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\test\test.exe", oldfile + " " + newfile);
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo);

Thread.Sleep(1000);

if (File.Exists(oldfile))
{
oldhash = getSHA256b64(oldfile);
}
if (File.Exists(newfile))
{
newhash = getSHA256b64(newfile);
File.Delete(oldfile);
File.Move(newfile, oldfile);
}

pBar1.Value = pBar1.Value + 1;

txtLog.AppendText(oldfile + "\r\n Old: " + oldhash + "\r\n New: " + newhash + "\r\n");
if (!(oldhash == newhash))
{
txtLog.AppendText("Successfully expanded file \r\n");
}
else
{
txtLog.AppendText("Unable to expand file \r\n");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
}
}
}

问题是我的进度条没有更新。我知道一点 C#,但我是 WPF 的初学者,无法设置后台工作人员来更新我的 UI。有人可以给我一些指示吗?目前该应用程序运行正常,但进度条跳到 100% 完成并且所有文本突然出现。

提前致谢!

汤姆

最佳答案

首先,您需要后台工作人员处理其 DoWork 事件中的流程。在该事件中,您可以调用 ProgressChanged 事件来更新进度条。下面是一个例子:

    private void btnRun_Click(object sender, RoutedEventArgs e)
{
if(workerThread.IsBusy == false) // Make sure someone doesn't click run multiple times by mistake
{
pBar1.Value = 0;
workerThread.RunWorkerAsync();
}
}

private void workerThread_DoWork(object sender, DoWorkEventArgs e)
{
// Definitions and so forth
pBar1.Minimum = 0;
pBar1.Maximum = length;
int status = 0;
using (StreamReader sr = new StreamReader(filelist))
{
string line;
while ((line = sr.ReadLine()) != null)
{
// Try/Catch work here
status++;
workerThread.ReportProgress(status);
}
}

private void workerThread_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
pBar1.Value = e.ProgressPercentage;
}

关于C# 进度条和文本框不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938964/

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