Лучший способ связать с данными группу переключателей в WinForms

Как объяснено в сообщении в блоге, которым вы поделились, это довольно просто, как указано ниже

Экосистема пакетов Julia уже содержит довольно много пакетов, связанных с GPU, нацеленных на разные уровни абстракции, как показано на рисунке 1 показывает. На самом высоком уровне абстракции пакеты, специфичные для домена, такие как MXNet.jl и TensorFlow.jl, могут прозрачно использовать графические процессоры в вашей системе. Более универсальная разработка возможна с ArrayFire.jl, и если вам нужна специализированная реализация CUDA линейной алгебры или алгоритма глубокой нейронной сети, вы можете использовать специфичные для поставщика пакеты, такие как cuBLAS.jl или cuDNN.jl. Все эти пакеты, по сути, являются обертками вокруг собственных библиотек и используют интерфейсы внешних функций (FFI) Джулии для вызова API библиотеки с минимальными издержками.

blockquote>

Пакеты CUDAdrv и CUDAnative предназначены для непосредственного использования API среды выполнения CUDA и написания ядер от самой Джулии. Я полагаю, что именно здесь CuArray пригодится - оборачивая нативные объекты Julia в доступный формат CUDA, грубо говоря.

ArrayFire, с другой стороны, является универсальной библиотекой, которая охватывает все (cuBLAS, cuSparse, cuSolve, cuFFT) CUDA предоставила доменные библиотеки в хороший интерфейс (функции). Помимо интерфейса к доменным библиотекам CUDA, ArrayFire сам по себе предоставляет множество других функций в области статистики, обработки изображений, компьютерного зрения и т. Д. Он имеет замечательную JIT-функцию , где код пользователя компилируется во время выполнения. ядро - проще говоря. ArrayFire.jl - это языковая привязка с некоторыми дополнительными улучшениями, характерными для Julia, на уровне оболочки.

В этом и заключается общая разница. С точки зрения разработчиков, использование библиотеки (например, ArrayFire) в основном снимает бремя поддержки API CUDA и поддержки / настройки ядер для достижения оптимальной производительности, что, на мой взгляд, занимает много времени.

PS. Я являюсь членом команды разработчиков ArrayFire.

25
задан Geir-Tore Lindsve 23 March 2009 в 20:37
поделиться

2 ответа

Ниже приводится общая реализация RadioGroupBox в духе предложения ArielBH (некоторый код заимствован из RadioPanel Джея Эндрю Аллена ). Просто добавьте к нему RadioButtons, установите для их тегов разные целые числа и привяжите их к свойству «Selected».

public class RadioGroupBox : GroupBox
{
    public event EventHandler SelectedChanged = delegate { };

    int _selected;
    public int Selected
    {
        get
        {
            return _selected;
        }
        set
        {
            int val = 0;
            var radioButton = this.Controls.OfType<RadioButton>()
                .FirstOrDefault(radio =>
                    radio.Tag != null 
                   && int.TryParse(radio.Tag.ToString(), out val) && val == value);

            if (radioButton != null)
            {
                radioButton.Checked = true;
                _selected = val;
            }
        }
    }

    protected override void OnControlAdded(ControlEventArgs e)
    {
        base.OnControlAdded(e);

        var radioButton = e.Control as RadioButton;
        if (radioButton != null)
            radioButton.CheckedChanged += radioButton_CheckedChanged;
    }

    void radioButton_CheckedChanged(object sender, EventArgs e)
    {
        var radio = (RadioButton)sender;
        int val = 0;
        if (radio.Checked && radio.Tag != null 
             && int.TryParse(radio.Tag.ToString(), out val))
        {
            _selected = val;
            SelectedChanged(this, new EventArgs());
        }
    }
}

Обратите внимание, что вы не можете выполнить привязку к свойству «Selected» через конструктор из-за проблем с порядком инициализации в InitializeComponent (привязка выполняется до инициализации переключателей, поэтому их тег равен нулю в первом назначении). Поэтому просто свяжите себя так:

    public Form1()
    {
        InitializeComponent();
        //Assuming selected1 and selected2 are defined as integer application settings
        radioGroup1.DataBindings.Add("Selected", Properties.Settings.Default, "selected1");
        radioGroup2.DataBindings.Add("Selected", Properties.Settings.Default, "selected2");
    }
23
ответ дан 28 November 2019 в 21:41
поделиться

Я думаю, что использовал бы свой собственный GroupBox. Я связал бы CustomGroupBox с Вашей Моделью и установил бы корректный RadioButton (использующий тег или свойства имени) от связанного значения.

2
ответ дан 28 November 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: