По-сути получится небольшой сервер внутри приложения, что автоматически приведет к варианту взаимодействия приложение - прокси(внутренний) сервер - настоящий сервер.
Ну для начала стоит сказать какое именно исключение возникает.
А так - по ссылке смотрим исходник и как минимум видим:
public RandomForest Learn(double[][] x, int[] y, double[] weights = null)
{
if (weights != null)
throw new ArgumentException(Accord.Properties.Resources.NotSupportedWeights, "weights");
Небезопасный код совершенно не страшен и даже совсем безопасен, если мозгов пишущего хватает на то, чтобы предусмотреть все последствия.
Как показывает практика - даже у старух бывают фейловые прорухи. Зачастую глобальных масштабов.
Как примеры - те же до сих пор появляющиеся уязвимости на переполнении стека и прочих классических штук времен Моррисона
using - это как минимум две ипостаси:
- будем использовать такую-то dll
- вот эту фигню будем использовать только в этом блоке, а потом вытрем нафиг
А так директива - это по-wiki: "общее руководящее указание, даваемое высшим органом подчинённому"
В применении к программированию - указание программиста компилятору
Вообще stored procedures и во-первых не надо динамически генерить новые для sql сервера запросы с рисками ошибок и всяких дыр. А для процедур sql сервер хранит планы выполнения и прочие вкусности оптимизации.
Все зависит от прошлого опыта (подготовки). Если их нет - то наверное смотреть книги по основам ООП и C# и далее уже углубление в сторону нынешнего C# 7.0 (впрочем если изучить 5, то потом фичи 6,7 окажутся просто полезным сахарком)
Так же стоит смотреть в сторону WPF, это хорошо, но покажется несколько объемным для мелких задач.
WPF и как бы естественно MVVM - достойно, выразительно.
Ну framework - все-таки на сегодня 4.5 и выше, если конечно "совместимость с xp" не будет принципиальной.
Правильный путь - вязать к полям формы поля объекта, читать-сохранять - объект. Точнее научить объект сохраняться при необходимости и загружаться например при создании.
Извращенный - крутиться циклом по всем элементам формы и читать-писать пары имя-значение, потом иметь море секса при изменении/переименовании элементов -)
Можно тогда сразу шагнуть дальше - не нанимать питона из шарпа, а нанять программиста вместо себя =))
Если что уровень сложности вызова внешнего приложения и штатного фреймвочного сериализатора-десериализатора одинаковы. Так что есть риск не справиться и с извращенным вариантом...
Два примера:
1. некий огромный набор данных, по которому нечто рассчитывается
в исходных данных ноль недопустим - exception подразумевающее "все пропало" и прекращение действий (выбран не тот файл и т.п.)
2. тот же набор данных
в процессе сложных вычислений за счет округления один из делителей может округлиться до нуля... если это предсказуемо и допустимо - можно ветвиться if-ом и присваивать результату такого деления "псевдобесконечность" - например максимальное значения int и т.п. и далее продолжать вычисления
Ну например изучить чуть-чуть то что приводится в примерах книжек или msdn на предмет MVVM - там как раз примерно в середине подходят к форме с гридом, полями для редактирования и кнопками.
По сути все, кроме конкретики модели получается практически стандартно-единообразно, не считая рюшек визуального оформления.
оверхеда в плане написания кода - практически 0, при желании можно делать плагины так, что они окажутся "двойного назначения" - можно положить туда, где лежат плагины, а можно запускать как exe (пользительно как минимум сделать минимальную морду например для конфигурирования и/или тестирования)