После того, как я нажал кнопку «Пуск» в WPF, программа перешла на часть TPL. Затем основное окно замерзало.Windows freezing withTPL
private void Start_Click(object sender, RoutedEventArgs e)
{
var producer = Producer();
var consumer = Consumer();
Task.WaitAll(producer, consumer);
}
async Task Producer()
{
try
{
// add items to the queue
async Task Consumer()
{
try
{
var executionDataflowBlockOptions = new ExecutionDataflowBlockOptions
{
//TaskScheduler = TaskScheduler.FromCurrentSynchronizationContext(),
MaxDegreeOfParallelism = 4
};
var consumerBlock = new ActionBlock<AppointmentReminder>(
r=>
{
string s = RunScript(r);
Dispatcher.Invoke((Action)delegate()
{
slider.Value = slider.Value - 1; // update the slider value;
});
},executionDataflowBlockOptions);
// m_Queue is bufferBlock
m_Queue.LinkTo(
consumerBlock, new DataflowLinkOptions { PropagateCompletion = true });
await Task.Delay(500);
}
Вопросы:
- Как иметь дело с окном замораживания? Если я раскомментирую
TaskScheduler = TaskScheduler.FromCurrentSynchronizationContext()
, он все еще замерзает, и часть клиента никогда не будет достигнута. - Я хочу обновить слайдер на
slider.Value = slider.Value - 1;
, это тоже не удалось.
Вы должны форматировать Ваш код. – i3arnon