Как уже упоминалось здесь , Dispatcher.Invoke
может заморозить UI. Вместо этого используйте Dispatcher.BeginInvoke
.
Вот удобный класс расширений, который упрощает проверку и вызов диспетчера вызовов.
Пример использования: (вызов из окна WPF)
this Dispatcher.InvokeIfRequired(new Action(() =>
{
logTextbox.AppendText(message);
logTextbox.ScrollToEnd();
}));
Класс расширения:
using System;
using System.Windows.Threading;
namespace WpfUtility
{
public static class DispatcherExtension
{
public static void InvokeIfRequired(this Dispatcher dispatcher, Action action)
{
if (dispatcher == null)
{
return;
}
if (!dispatcher.CheckAccess())
{
dispatcher.BeginInvoke(action, DispatcherPriority.ContextIdle);
return;
}
action();
}
}
}
В общем случае Вы хотите "оптимизатор" или "mimimizer". См. http://en.wikipedia.org/wiki/Optimization_ (математика) #Solvers для некоторого exmples. Я вижу, что первая ссылка ( http://en.wikipedia.org/wiki/IMSL_Numerical_Libraries ) утверждает, что имела поддержку c#.
<час>Редактирование: Для ограниченного использования, которое Вы предлагаете (линейные или квадратичные многочлены), Вы могли просто перейти к любой копии Числового Recipies, захватить прямо вперед реализация и перевести в свой язык. Общий минимизатор является излишеством.
, Но примечание, также, что многочлены могут быть плохими предикторами.
Можно хотеть проверить alglib. Это находится в C++ вместо C#, но Вы могли бы быть в состоянии записать обертку по нему.
Вот ссылка на код C #, чтобы сделать именно это: http://www.trentfguidry.net/post/2009/08/01/Linear-Regression-of-Polynomial-Coefficients.aspx
Удачи !
Редактировать: Видимо ссылка выше не работает. Некоторое время назад я принял другое решение: http://procbits.com/2011/05/02/linear-regression-in-c-sharp-least-squares/