0

Hey i've been writing an application in which i need to create thread to perform background tasks while the GUI is being loaded. However no matter that i do i can find a way around this error:

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

The line in question is the creating of a new thread which calls the "devices_online" method.

The Full code which is being effected is:

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

And Method is:

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

}

Ive done so much Googleing but Vala isn't exactly the most popular language. Any help?

4

1 回答 1

3

Like the compiler error says, you are getting a void by calling a method. Then you are trying to pass the void value into the thread constructor.

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

The second cunstructor argument of Thread<T>.try () expects a delagate of type ThreadFunc<T> which you are not satisfying.

You are confusing a method call with a method delegate.

You can pass an anonymous function to fix that:

Thread<void> thread = new Thread<void>
    .try ("Conntections Thread.", () => { devices_online (listmodel); });
于 2017-02-27T17:08:15.517 回答