2016-01-07 2 views
0

Привет Я ищу некоторые очень простые сведения о кодировании C# в целом и особенно WPF.C# общие вопросы для потоков и многопоточности в WPF

Прежде всего, я не совсем понимаю, когда мне нужно обновить компонент формы в WPF с помощью Invoke и когда нет.

Например, если у вас есть простая кнопка щелчка событие, Usally сделать что-то подобное в нем:

this.label1.content = this.dataObject.Position; 

Но если вы, например, опрос много данных, как правило, вызвать ярлык 1.

Я не понимаю, когда мне приходится ссылаться, а когда нет. Это зависит от моего экземпляра dataObject? Например, когда у меня есть форма WPF и другой класс в моем проекте, который называется dataObject.cs и я инициализировать этот класс с

private dataObject dataO = new dataObject(); 

в моей форме WPF, мне придется вызвать его, когда я использую его, потому что это еще один класс? Или, скорее, мне не нужно вызывать его, потому что он инициализирован в моем gui, и, таким образом, поток GUI обрабатывает класс в любом случае? Итак, в каких случаях я должен вызывать объект данных?

Во-вторых, я хотел бы получить информацию о том, как повысить производительность и распределение данных в C#. Например, в каком месте в моем gui я объявляю новые потоки, переменные и т. Д. Для лучшей производительности? Где их инициализировать? Когда рекомендуется создать другой класс, который обрабатывает все мои параметры и как я могу назвать этот класс (и где) в моем WPF-коде? Возможно, вы знаете некоторые хорошие учебники или книги в целом, которые сосредоточены на этой теме.

Большое спасибо!

+0

Как правило, в WPF вам нужно использовать 'Dispatcher.Invoke', когда вы выполняете поток, отличный от потока пользовательского интерфейса. –

+0

Я отправил ответ на вопрос, который мог бы прояснить вам все об этом, посмотрите на этот http: // stackoverflow.com/a/33671288/1728469 –

+1

Попробуйте задать один вопрос. Будет намного легче придумать полезный ответ. – oleksii

ответ

2

Я не понимаю, когда мне приходится ссылаться, а когда нет.

В приложениях пользовательского интерфейса есть 1 поток, который обрабатывает весь пользовательский интерфейс. Обычно это основной поток, который запускает ваше приложение (см. Message Pump для получения дополнительной информации). Как правило, вы не хотите выполнять тяжелую работу в этом потоке, потому что когда вы это сделаете, никакие другие сообщения не могут быть обработаны. Это означает, что ваш пользовательский интерфейс становится лаконичным и безответственным.

Если это быстрое обновление, вы можете сделать это в основном потоке пользовательского интерфейса. Если операция требует длительного времени - сделайте это в другом потоке с Invoke.

Другое использование Invoke - это когда вам нужно обновить состояние пользовательского интерфейса из потока, отличного от UI.

Во-вторых, я хотел бы получить информацию о том, как повысить производительность и распределение данных в C#.

Не оптимизируйте, пока это действительно не нужно, материал, который вы упомянули, вероятно, не имеет значения с точки зрения производительности. На этом этапе я сконцентрируюсь на разработке тестируемого кода и написании тестов, а не на производительности. Когда у вас есть явная проблема с производительностью, вы можете использовать инструменты, помогающие диагностировать узкие места, например. профилировщики из RedGate или JetBrains.

+0

Я бы добавил деталь: как я объясняю в вышеупомянутом ответе, я отправил другой вопрос: «Обновления ui», выполненные с использованием встроенной привязки данных в WPF, не требуют особого внимания (нет необходимости использовать invoke) поскольку связанные с изменением свойства вещи автоматически сортируются на уровне пользовательского интерфейса самой картой WPF –

Смежные вопросы