private void Button_Click_2(object sender, RoutedEventArgs e) { if (clientsRunning != 0) { return; } Interlocked.Increment(ref clientsRunning); // Client start for (int c = 0; c < Clients; c++) { if (c != 0) { Interlocked.Increment(ref clientsRunning); } _clientTasks[c] = new Task(() => { while (true) { SocketWrapper[] clientSocketArr = new SocketWrapper[1]; SocketsWrapper.Socket(AddressFamily.QCC_AF_INET, SocketType.QCC_SOCK_STREAM, clientSocketArr); using (SocketWrapper clientSocket = clientSocketArr[0]) { uint q = clientSocket.Connect(Address, Port); byte[] tempBytes = new byte[PatternLength]; int[] receivedArr = new int[1]; int bytesLeft = tempBytes.Length; int byteCount = 0; bool success = true; do { q = clientSocket.Recv(tempBytes, tempBytes.Length, receivedArr); if (q != 0) { success = false; break; } for (int i = 0; i < receivedArr[0]; i++) { if (tempBytes[i] != ((i + byteCount) % 256)) { success = false; break; } } byteCount += receivedArr[0]; bytesLeft -= receivedArr[0]; }while (bytesLeft > 0); // Update the count Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { if (success) { successCount.Text = (++_successCount).ToString(); } else { failCount.Text = (++_failCount).ToString(); } }); } } Interlocked.Decrement(ref clientsRunning); }); _clientTasks[c].Start(); } }