Чем вам так понравилась Java
Почему энтерпрайз пишется в основном на Java?
Почему джавистам больше платят?
static void print(this string s, string pfx = "", string sfx = "") => Console.WriteLine(pfx + s + sfx);
static void print(this IEnumerable<string> sa, string pfx = "", string sfx = "") => sa.ToList().ForEach(s => s.print(pfx, sfx));
static void print(this string s) => Console.WriteLine(s);
static void print(this IEnumerable<string> sa) => sa.ToList().ForEach(s => s.print());
using System;
using System.Diagnostics;
using System.Linq;
namespace ff.links
{
static partial class Program
{
static void Main(string[] args)
{
var sw = new Stopwatch();
sw.Start();
"let's begin...".print();
var finds = fromTypical().scan();
"find targets is ".print(pfx, finds.Count().ToString());
//finds.print();
var bro = finds.Where(b => b.Contains(ffBinary));
"find browsers is ".print(pfx, bro.Count().ToString());
bro.print(pfx);
var cfg = finds.Where(b => b.Contains(fflConfig));
"find configs is ".print(pfx, cfg.Count().ToString());
cfg.print(pfx);
var profiles = finds.Where(b => b.Contains(ffProfileSign));
"find profiles is ".print(pfx, profiles.Count().ToString());
//profiles.print();
profiles.buildLinks(bro.First());
//profiles.prefsApplay();
//links2start();
sw.Stop();
var ts = sw.Elapsed;
$"RunTime {ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds:000}".print();
//#if DEBUG
// "press any key to continue...".print();
// Console.ReadKey();
//#endif
}
const string pfx = " ::> ";
}
}
Мне кажется, что вместо классов здесь должны быть интерфейсы?в тексте вопроса
Стоит ли использовать здесь перечисления?вы уж определитесь в хотелках:
namespace TryEnum
{
enum DownloadType
{
Video, Audio, Custom, Unknown, Default
}
enum ForceIpProtocol
{
IPv4, IPv6
}
enum ProxyProtocol
{
HTTPS, HTTP, SOCKS4, SOCKS5
}
}
class ClassName : IClassName
, но это не совсем наследование, там немножко другая реализация). И интерфейс нужен в том случае, если нужно реализовать полиморфизм в коде и/или что бы упростить доступ к публичным полям в классах, которые реализуют этот интерфейс. static void Create()
{
// empty...
}
class SimpleHuman : IHuman
{
public string Name { get; set; }
public int Age { get; set; }
public SimpleHuman()
{
Name = "Generic human...";
Age = 20;
}
public SimpleHuman(string name) : this()
{
Name = name;
}
public SimpleHuman(string name, int age) : this()
{
Name = name;
Age = age;
}
}
class CoolHuman : IHuman
{
public string Name { get; set; }
public int Age { get; set; }
public CoolHuman()
{
Name = "BOB!";
Age = 20;
}
public CoolHuman(string name) : this()
{
Name = name;
}
public CoolHuman(string name, int age) : this()
{
Name = name;
Age = age;
}
}
interface IHuman
{
string Name { get; set; }
int Age { get; set; }
}
class Create
{
public IHuman Human { get; set; }
public Create()
{
Human = new CoolHuman();
}
public void Hello()
{
Console.WriteLine("Hello, {0}. Today you are {1} years old", Human.Name, Human.Age);
}
}
IDownloadProgress.Status
вы узнаете когда будет 100%, но надо читать доки, возможно есть калбэк сообщающий конкретно о завершенииprogressHandler
, сделайте такой же и для аудио. когда оба отловят 100%, тогда время и объединять..tmp
, а потом копирование в целевую папку. об этом тоже надо искать инфу в доках на api. но когда отловите окончания загрузок, тайм ауты при необходимости, можно и экспериментально подбиратьawait
, вернуть таски и ждать их завершения - https://docs.microsoft.com/ru-ru/dotnet/api/system...await
. Поэтому проста так вызвать два ваших метода подряд и надеяться на лучшее нельзя. async voidвернет управление обратно, не дожидаясь выполнения асинхронного кода внутри. вам же нужно возвращать таску
public async Task DownloadVideo1080PAsync(string path, ProgressBar progressBar, string link)
{
await ytClient.Videos.Streams.DownloadAsync(audioInfo, Path.Combine(newLink, $"audio.wav"));
await ytClient.Videos.Streams.DownloadAsync(videoInfo, Path.Combine(newLink, $"video.mp4"), progressHandler);
}
public Task MergeAudioVideoAsync(string link)
{
return ffmpeg.ExecuteAsync($@"-i video.mp4 -i audio.wav -c:v copy -c:a aac newVideo.mp4");
}
....
await DownloadVideo1080PAsync(....);
await MergeAudioVideoAsync(...);
....
int[] buffer
buffer = new int[10050000000]
у вас выделяться гигабайты памяти на него, и можно будет что-то в него сохранить. int[] array = new[] { 1, 2, 3, 4, 5 };
int temp;
for (int i = 0; i < array.Length-1; i++)
{
for (int j = i + 1; j < array.Length; j++)
{
if (array[i] > array[j])
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
int[] array = new[] { 1, 2, 3, 4, 5 };
var tmp = array[0];
array[0] = array[1];
array[1] = tmp;
int[] array = new[] { 1, 2, 3, 4, 5 };
var maxindex = 0;
var max = array[maxindex];
for(var i = maxindex; i<array.Length; i++)
if (array[i] > max)
{
maxindex = i;
max = array[i];
}
var array = new[] { 1, 2, 3, 4, 5 };
(array[0], array[1]) = (array[1], array[0]);
.. и поискvar array = new[] { 1, 2, 3, 4, 5 };
var (maxindex, max) = (0, array[0]);
for(var i = maxindex; i<array.Length; i++)
if (array[i] > max)
(maxindex, max) = (i, array[i]);
// предполагается что ваш сервис скачивает асинхронно, и после скачивания части файла вызывает это событие
service.DownloadChunk += ChunkProcess;
private void ChunkProcess(object sender, int size)
{
// обязательно проверьте в каком потоке обновляете UI
// https://docs.microsoft.com/ru-ru/dotnet/framework/winforms/controls/how-to-make-thread-safe-calls-to-windows-forms-controls?view=netcore-3.1
progressBar1.Value += size;
}