Поскольку вы видите проблемы только после определенного количества итераций, проблема, скорее всего, заключается в исчерпании ресурсов какого-либо рода, что звучит так, как будто ресурсы не очищаются своевременно.
Из приведенных выше комментариев кажется, что вы не утилизируете свои WlanClient
экземпляры, которые могут быть частью (или всеми) проблемы. Я могу понять, почему вы не избавляетесь от них, потому что они не дают вам никакого очевидного способа сделать это. Это кажется действительно проблематичным дизайном с их стороны. Существуют всевозможные руководящие принципы проектирования, в которых говорится, что подобный класс должен давать вам либо публичный Dispose
метод, либо публичный Close
метод, но хотя они и имеют оба этих методов, они намеренно сделали их оба частные.
Но класс реализует IDisposable
, так что вы все еще можете очистить его, добавив блок using
:
using (var wlanClient = new WlanClient()) {
....
} // wlanClient will be disposed when flow leaves the block
Это обеспечит очистку всех ресурсов объекта в тот момент, когда поток покидает блок using
(даже если поток уходит из-за исключения). Ваши соединения будут закрыты, ваша неуправляемая память освобождена, и все, что еще должно произойти.