Одесса: 6°С (вода 8°С)
Киев: 2°С
Львов: -3°С

Тема: C#. Фоновый поток или очередь сообщений?

Ответить в теме
Показано с 1 по 7 из 7
  1. Вверх #1

    По умолчанию C#. Фоновый поток или очередь сообщений?

    Всем привет!

    Есть простой паблик класс, типа:

    public class read_from
    {
    public bool read_from_device()
    {
    // тут типа коннект
    // тут типа читам данные (долго, много данных)
    // тут типа дисконнект
    }
    }

    Приложение гуишное... Ну и на событие по кнопочке или по таймеру (например) вызывается метод "read_from_device" экземпляра этого класса

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

    Фоновый поток? Или есть еще какие способы?

    Спасиб.


  2. Вверх #2
    асинхронное чтение, если такое возможно

  3. Вверх #3
    спасиб тебе от Frodo, Bilbo...

    А как оно выглядит? Хотяб структурно или блочно-модульно?

  4. Вверх #4
    навскидку что-то типа такого, если доступ к устройству осуществляется через файловый дескриптор http://sauron.org.ua/view_post.php?id=46 раздел "Асинхронный доступ к файлам".
    если не подходит - погугли с словом IAsyncResult. Я использовал когда-то для получения ип по списку доменов - способ работал неплохо

  5. Вверх #5
    Новичок Аватар для HisMajestyValeriy
    Пол
    Мужской
    Адрес
    Odessa
    Возраст
    29
    Сообщений
    48
    Репутация
    16
    ... С помощью асинхронного ввода и вывода пользователь может вызвать метод BeginRead. Основной поток продолжать выполнять другие операции и получает возможность обработки данных позже. Также множественные запросы ввода и вывода могут обрабатываться одновременно.

    Чтобы определить доступность данных, можно вызвать метод EndRead или EndWrite, передавая IAsyncResult в соответствующий запрос ввода и вывода. Можно также указать метод обратного вызова, который будет вызывать метод EndRead или EndWrite, чтобы выяснить какое количество байтов было считано или записано. Асинхронные ввод и вывод являются более эффективными в том случае, когда одновременно обрабатывается большое количество запросов на ввод и вывод, но, как правило, они требуют значительных изменений в приложении для обеспечения его корректной работы...
    Взято отсюда
    А вообще мсдн, полезная штуковина

  6. Вверх #6
    Постоялец форума Аватар для bOOs
    Пол
    Мужской
    Сообщений
    2,935
    Репутация
    1867
    ((Action)read_from_device).BeginInvoke(null,null);
    ...
    ...
    public void read_from_device()
    {
    // тут типа коннект
    // тут типа читам данные (долго, много данных)
    // тут типа дисконнект
    }

  7. Вверх #7
    Т.к. гуй работает в одном потоке, надо делать через отдельный поток. или придумывать свою реализацию многозадачности))))


Ответить в теме

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения