Я использую библиотеки Pcapdot.net для отправки буфера пакетов в мой сетевой адаптер. Я проверил файл Wireshark и собрал всю информацию, например, количество пакетов, продолжительность и т. Д. Мой основной класс отправляет буфер и имеет несколько свойств (количество пакетов, продолжительность ...). В основном потоке я проверяю этот класс на BackgroundWorker .ProgressChanged:UI застрял во время обновления ProgressBar
bgWoSingle = new BackgroundWorker();
bgWoSingle.WorkerReportsProgress = true;
bgWoSingle.ProgressChanged += new ProgressChangedEventHandler(bgW_ProgressChanged);
Каждый пакет внутри файла Wireshark имеет timstamp и, конечно, может отправить этот буфер в другой скорости скорости путем увеличения или уменьшения метку времени между пакетами. сейчас моя проблема:
Одним из свойств, которые я проверяю, является то, сколько пакетов я уже отправил. Поскольку я знаю, сколько пакетов содержит мой файл, я могу показать прогресс через индикатор выполнения. Если я изменяю скорость отправки до максимума, удаляя всю задержку между воспроизведением пакетов, скорость будет такой же быстрой, и индикатор выполнения и весь пользовательский интерфейс застряли, пока он не закончит отправку всех пакетов. Как я могу его изменить? Может быть, обновить мой ProgressBar через другой поток?
это моя функция, кто проверить мой класс:
void bgW_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//bla bla bla (check all Class properties)
pcap = e.UserState as Pcap;
progressBar1.Value = e.ProgressPercentage; //here is my progressBar update
//bla bla bla (check all Class properties)
}
«Застрял», значит, не реагирует (т. Е. Окно становится серым при щелчке, следовательно, вы ДОЛЖНЫ выполнять ввод-вывод из другого потока) или просто не обновляется индикатор выполнения? –
Да, он стал серым на клике с сообщением «не отвечающий» до его завершения, как я могу обновить все мои bgW_ProgressChanged через другой поток? – falukky