1

我正在尝试学习 Vala,所以我正在制作一个小型 GUI 应用程序。我之前的主要语言是 C#,所以一切进展顺利。

但是,我现在已经碰壁了。我需要连接到不会立即回答我的客户的外部网络服务器(使用 GIO)。这会使 GUI 在程序连接并执行其操作时冻结。

在 C# 中,在这种情况下我可能会使用 BackgroundWorker。不过,我似乎无法为 Vala 找到类似的东西。

基本上,我有一个 MainWindow.vala,我在其中将用于单击某个按钮的信号连接到创建 ProcessingDialog.vala 的新实例的方法。这在 MainWindow 上显示了一个对话框,我希望用户在程序执行工作(连接到服务器、通信)时看到该对话框。

我有哪些替代方案可以使这种情况发挥作用?

4

2 回答 2

3

GIO 提供异步方法,例如查看异步客户端:https ://live.gnome.org/Vala/GIONetworkingSample

如果您不了解 Vala 中的异步方法,请尝试查看教程:https ://live.gnome.org/Vala/Tutorial#Asynchronous_Methods

于 2012-04-08T08:34:28.263 回答
0

上面 lethalman 的回答可能是最有意义的,如果您正在进行网络通话,异步请求确实是您最好的选择。在其他情况下,您可以使用 Vala 的内置线程支持来完成后台任务。看起来很快就会有更好的库可用,但这是稳定的。

// Create the function to perform the task
public void thread_function() {
    stdout.printf("I am doing something!\n");
}

public int main( string[] args ) {
    // Create the thread to start that function
    unowned Thread<void*> my_thread = Thread.create<void*>(thread_function, true);

    // Some time toward the end of your application, reclaim the thread
    my_thread.join();

    return 1;
}

请记住使用“--thread”选项进行编译。

于 2012-04-26T22:41:26.637 回答