2013-10-24 8 views
0

У меня есть ползунок и с изменением знака слайдера мне нужно выполнить некоторые вычисления. Поскольку расчет принимает 100-200 мс, слайдер застревает. Есть ли способ сделать эти вычисления backgroud (В этом случае мне нужно получить доступ к некоторым значениям из основного потока) и по-прежнему показывать последний результат.Выполнение фоновой операции при изменении ползунка в C#

+1

ASP.NET или приложение для Windows? – Izikon

+0

И если Windows, это WPF или Windows Forms? –

ответ

0

С BackgroundWorker Thread вы можете получить доступ к главному тему с

Application.Current.Dispatcher 

В коде вы могли бы что-то вроде функции X (интермедиат newSliderValue) { UpdateUI (() => {SliderControl.Value = newSliderValue ;}); }

И призыв к dispactcher выглядит

private void UpdateUI(Action methode) 
{ 
    Application.Current.Dispatcher.Invoke(methode, DispatcherPriority.Normal); 
} 
0

Если длинные вычисления IO ограничивающих операции лучшим способ заключается в использовании асинхронного/ОЖИДАНИЕ функции. Отметьте свой обработчик в асинхронных и чем использовать асинхронный/Await:

 var res = await Task.Run(() => 
       { 
        Thread.Sleep(2000); // perform long calculation 
        return e.NewValue*2; 
       } 
      ); 
     MessageBox.Show(res.ToString(CultureInfo.InvariantCulture)); 

Обратите внимание, что вам не нужно какое-то вызов к Acces графического интерфейса нитки после операции закончена.

Если операции CPU-ограничивающее вы можете использовать такие задачи, как это:

 var t = Task.Run(() => 
     { 
      Thread.Sleep(2000); // perform long calculation 
      return e.NewValue*2; 
     }).ContinueWith(task => Dispatcher.Invoke(() => MessageBox.Show(task.Result.ToString(CultureInfo.InvariantCulture)))); 

Обратите внимание, что в этом случае я использую диспетчер для WPF (в WinForm форме класса имеет Invoke() метода сами по себе) ,

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

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