我正在处理一个使用这样的管道输出文本的文件:
> main.exe | set-content image.ppm -encoding String
问题是我希望有一个进度条,而不会将它通过管道传输到文本文件中。 Console.Error.Write()
似乎这样做,但是我不能让倒计时发生在适当的位置,而不是一堆连续发生的字符串。我尝试过Console.SetCursorPosition()
几种不同的使用方式,但也许我使用不当。
这是它如何与 C++ 一起工作,我正在尝试用 C# 编写它:
std::cout << "P3\n" << image_width << ' ' << image_height << "\n255\n";
for (int j = image_height - 1; j >= 0; --j) {
//progress bar
std::cerr << "\rScanlines remaining: " << j << ' ' << std::flush;
//output to ppm file
for (int i = 0; i < image_height; ++i) {
auto r = double(i) / (image_width - 1);
auto g = double(j) / (image_height - 1);
auto b = 0.25;
int ir = static_cast<int>(255.999 * r);
int ig = static_cast<int>(255.999 * g);
int ib = static_cast<int>(255.999 * b);
std::cout << ir << ' ' << ig << ' ' << ib << '\n';
}
C#(无法让进度条正常工作)
Console.WriteLine("P3");
Console.WriteLine($"{image_width} {image_height}");
Console.WriteLine(255);
for (int j = image_height - 1; j >= 0; j--)
{
//progress bar
//Console.SetCursorPosition(0, Console.CursorLeft);
//Console.SetCursorPosition(left, top);
Console.Error.Write($"Scanlines Remaining: {j}");
//output to ppm file
for (int i = 0; i < image_height; i++)
{
var r = (double)i / (image_width - 1);
var g = (double)j / (image_height - 1);
var b = 0.25;
int ir = (int)(255.999 * r);
int ig = (int)(255.999 * g);
int ib = (int)(255.999 * b);
Console.WriteLine($"{ir} {ig} {ib}");
}
}