У меня есть приложение, которое использует 1 главное окно и, в свою очередь, имеет 5 пользовательских элементов управления, которые создаются с помощью элемента управления ленты.
На одном из пользовательских элементов управления я запускаю поток:
if (AmtMembersWithEmail > 0)
{
DispatcherHelper.UIDispatcher.Invoke(new Action(() =>
{
max = 100;
Messenger.Default.Send<ShowProgressWindowMessage>(
new ShowProgressWindowMessage(this));
Progress = 0;
Thread.Sleep(1000);
}));
Таким образом, этот поток запускается и сообщает о ходе выполнения обратно в главное окно, в течение этого времени, поскольку поток исполняется, пользователь не может получить доступ к элементам управления или сделать что-либо еще в приложении, при чтении в диспетчере это нормальнопоскольку он должен использовать единый UIThread, который позволяет пользователю взаимодействовать с элементами управления в пользовательском интерфейсе.(Между прочим, используя Galasoft MVVM light!)
В окне, отображающем сообщение о ходе выполнения, есть команда, которая связывается с командой relay в моей модели представления: Ниже приведено окно извлечения из прогресса XAML:
<tk:LoadingAnimation Grid.Row="0" DataContext="{Binding}"/>
<ContentControl Visibility="{Binding CanBeAborted,
Converter={StaticResource VisibilityConverter}}" >
<Hyperlink Command="{Binding AbortCommand}">cancel</Hyperlink>
</ContentControl>
Есть ли способ использовать диспетчер, чтобы позволить потоку работать в фоновом режиме?или пользователю просто нужно дождаться завершения операции?
Чтобы добавить, работа, которую фактически выполняет поток, - это зацикливание данных клиента, создание вложений (счетов-фактур) и создание объекта электронной почты для каждого клиента перед окончательным выполнением циклаэта новая коллекция электронной почты и отправка каждого письма индивидуально клиенту ...
Любая помощь будет принята с благодарностью ....