Неблокирование C# снабжает сокетом без в то время как (истинный) цикл

Я не знаю, правильно ли я понимаю, в чем проблема. Вы можете добавить изображение в кнопку ASP, но это зависит от того, как оно настроено и правильно ли оно вписывается. регулярное добавление фоновых изображений в кнопки asp дает вам изящную кнопку или фоновое изображение с наложением текста, поскольку в нем отсутствует тег изображения. например, изображение с надписью «ОТПРАВИТЬ ЗАПРОС».

Как простой способ сделать это, я использую файл «blankspace.gif» на своем веб-сайте. Это пустой GIF-файл размером 1x1 пикселя, и я изменяю его размер, чтобы заменить изображение на сайте.

Так как я не использую CSS для замены изображения, я использую CSS Sprites для уменьшения количества запросов. Мой веб-сайт изначально был размером 150 КБ для домашней страницы и имел около 140-150 запросов на загрузку домашней страницы. Создавая спрайт, я убил запросы, сжавшие размер изображения до доли размера, и он отлично работает, и в любой из областей, где вам нужен файл изображения для правильного размера, просто используйте то же самое изображение blankspace.gif.

<asp:ImageButton class="signup" ID="btn_newsletter" ImageUrl="~/xx/xx/blankspace.gif" Width="87px" Height="28px" runat="server" /

Если вы видите выше, класс загружает фоновое изображение в css, но это оставляет кнопку с текстом «submit Query» поверх нее, так как для этого нужно изображение, поэтому замена его на предварительно загруженное изображение означает, что вы избавились запроса и до сих пор изображение в CSS.

Готов.

8
задан ʞᴉɯ 3 November 2009 в 07:42
поделиться

3 ответа

См. Пример MSDN здесь . В примере показано, как получать данные асинхронно. Вы также можете использовать методы Socket BeginSend / EndSend для асинхронной отправки данных.

Следует отметить, что делегат обратного вызова выполняется в контексте потока ThreadPool. Это важно, если данные, полученные внутри обратного вызова, необходимо совместно использовать с другим потоком, например, с основным потоком пользовательского интерфейса, который отображает данные в форме Windows. Если это так, вам потребуется синхронизированный доступ к данным, например, с помощью ключевого слова lock .

Как вы заметили, с неблокирующими сокетами и циклом while процессор привязан к 100% . Асинхронная модель будет вызывать делегат обратного вызова только тогда, когда есть данные для отправки или получения.

8
ответ дан 5 December 2019 в 11:25
поделиться

Говоря в целом о блокирующий / неблокирующий ввод-вывод, применимый в целом:

Ключевым моментом является то, что в реальной жизни ваша программа выполняет другие вещи , не выполняя ввод-вывод. Все примеры составлены таким образом.

При блокировании ввода-вывода ваш поток «блокируется» во время ожидания ввода-вывода. ОС работает и делает другие вещи, например, разрешает запускать другие потоки. Таким образом, ваше приложение может выполнять множество операций (концептуально) параллельно, используя множество потоков.

В неблокирующем вводе-выводе, ваш поток запрашивает, возможен ли ввод-вывод, а в противном случае идет и делает что-то еще. Таким образом, вы делаете много вещей параллельно, явно - на уровне приложения - переключаясь между ними.

3
ответ дан 5 December 2019 в 11:25
поделиться

Socket.BeginReceive и AsyncCallback

0
ответ дан 5 December 2019 в 11:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: