Начать вкладку для новой темы, закрыть вкладку и завершить тему - PullRequest
2 голосов
/ 11 ноября 2011

Я следовал этому руководству на http://www.dotnetspark.com/kb/1867-create-tab-control-wpf.aspx, чтобы создать закрываемые вкладки для приложения WPF.

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

Как завершить поток при закрытой вкладке?

С уважением!

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Ни.Попросите главный поток создать вкладку, обновите вкладки, когда этого требуют другие различные потоки, и дайте команду потоку завершить работу, когда вкладка закрыта.

Узнайте, как использовать диспетчер для координации потоков.

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

Это обратный способ мышления о потоках.Нити - это просто транспортные средства, которые работают.Вы контролируете их, контролируя работу.Вы пишете каждую строку кода, которую выполняют потоки.Если вы не хотите, чтобы поток достиг X в условии Y, кодируйте его, чтобы он не выполнял X в условии Y.

В итоге, если логика программы говорит, что работа X не должна выполняться при закрытой вкладке Y, выполнитеthis:

1) Где-то храните флаг, который указывает, должна ли быть выполнена работа X.

2) В коде, который работает X, отметьте этот флаг.Если он установлен на no , не выполняйте работу.По логике программы работа не должна выполняться.Это не работает .

3) Когда вкладка закрыта, установите в потоке пользовательского интерфейса флажок для прекращения работы X.

Вкладки не должны соответствовать потокам,Это не имеет никакого логического смысла.Вкладки должны соответствовать тому, что отображается на вкладке.(Они могут «случайно» соответствовать потокам косвенно, но это не первично. Потоки действительно соответствуют любой работе, связанной с вкладкой.)

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

1 голос
/ 11 ноября 2011

Вам придется использовать поток пользовательского интерфейса для отображения / отображения вкладок.См. эту ссылку ( архив ).Как видно из названия, «Создавайте более отзывчивые приложения с помощью Dispatcher».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...