我正在開發一個用Vala和GTK +編寫的項目,我需要實現一個異步函數,因此我着手做一個測試的例子......並且出於某種原因,我出現以下錯誤:Vala中的異步函數 - Yield&Callback
async.vala:31.3-31.20: error: Access to async callback `asyncProc.callback' not allowed in this context asyncProc.callback ();
的代碼如下:
using Gtk;
public async void asyncProc()
{
stdout.printf ("STEEP -- 1 --\n");
yield;//Return to Main after the *1
stdout.printf ("STEEP -- 2 --\n");
}
public static int main (string[] args)
{
Gtk.init (ref args);
var win = new Window();
win.set_title ("Async Functions Test");
win.set_default_size (512,100);
win.set_border_width (12);
win.destroy.connect (Gtk.main_quit);
var boton = new Button.with_label (" Print in Terminal ");
//public delegate void AsyncReadyCallback (Object? source_object, AsyncResult res) callback_finalizacion;
boton.clicked.connect (()=> {
asyncProc.begin();
//--> Return of YIELD
stdout.printf ("STEEP -- B --\n");
asyncProc.callback();
});
win.add (boton);
win.show_all();
Gtk.main();
return 0;
}
和編譯使用以下命令:
valac --pkg gtk+-3.0 --pkg gio-2.0 async.vala
任何人有任何想法,因爲它可能發生? 我正在開發的項目如下:https://launchpad.net/gcleaner
非常感謝你的回答。這並不能幫助我解決我嘗試做的事情。在示例中,使用「Yield」來調用現有類的異步方法。而我想要做的是回到我的異步函數的流程(用「Yield」)。但是這幫助我調查了一下,但我仍然無法解決它! – lozanotux
您需要創建一個對象來保存該狀態,然後調用代碼管理該對象的實例。你也可以把這個狀態放在全球某個地方,但這可能很難管理。 – apmasell