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); });