Vala Threading: вызов метода void недопустим в качестве выражения

Эй, я пишу приложение, в котором мне нужно создать поток для выполнения фоновых задач во время загрузки графического интерфейса. Однако независимо от того, что я делаю, я могу найти способ обойти эту ошибку:

error: invocation of void method not allowed as expression
            Thread<void> thread = new Thread<void>.try("Conntections Thread.", devices_online(listmodel));

Рассматриваемая строка - это создание нового потока, который вызывает метод "devices_online".

Полный код, который выполняется:

try {

            Thread<void> thread = new Thread<void>.try("Conntections Thread.", devices_online(listmodel));

        }catch(Error thread_error){

            //console print thread error message
            stdout.printf("%s", thread_error.message);
        }   

И метод это:

private void devices_online(Gtk.ListStore listmodel){
    //clear the listview
    listmodel.clear();

    //list of devices returned after connection check
    string[] devices = list_devices();


    //loop through the devices getting the data and adding the device
    //to the listview GUI
    foreach (var device in devices) {    

        string name = get_data("name", device);
        string ping = get_data("ping", device);


        listmodel.append (out iter);
        listmodel.set (iter, 0, name, 1, device, 2, ping);
    }

}

Я так много занимался Google, но Vala - не самый популярный язык. Любая помощь?

1 ответ

Решение

Как говорит ошибка компилятора, вы получаете пустоту, вызывая метод. Затем вы пытаетесь передать значение void в конструктор потока.

Thread<void> thread = new Thread<void>
    .try ("Conntections Thread.", devices_online (listmodel));

Второй аргумент cunstructor Thread<T>.try () ожидает делагата типа ThreadFunc<T> который вас не удовлетворяет.

Вы путаете вызов метода с делегатом метода.

Вы можете передать анонимную функцию, чтобы исправить это:

Thread<void> thread = new Thread<void>
    .try ("Conntections Thread.", () => { devices_online (listmodel); });
Другие вопросы по тегам