2012-04-08 4 views
1

Я пытаюсь узнать Валу, поэтому я делаю небольшое приложение для графического интерфейса. Мой основной язык раньше был C#, так что все идет хорошо.Есть ли какой-то эквивалент BackgroundWorker .NET в Вала?

Однако, я ударил стену сейчас. Мне нужно подключиться к внешнему сетевому серверу (используя GIO), который не сразу отвечает на мой клиент. Это заставляет замолчать GUI, когда программа подключается и выполняет свою работу.

В C# я бы, вероятно, использовал BackgroundWorker в этом случае. Кажется, я не могу найти ничего подобного Вале.

В принципе, у меня есть MainWindow.vala, где я подключил сигнал для нажатия определенной кнопки на метод, который создает новый экземпляр ProcessingDialog.vala. Это показывает диалог по MainWindow, который я хочу видеть пользователю, пока программа выполняет работу (подключение к серверу, связь).

Каковы мои альтернативы, чтобы этот сценарий работал?

ответ

0

lethalman в выше, вероятно, делает наиболее смысл, асинхронный запрос действительно будет вашим лучшим выбором, если вы выполняете сетевой вызов. В других случаях вы можете использовать Vala's, встроенный в thread support, для выполнения фоновой задачи. Похоже, что скоро появится лучшая библиотека, но это то, что стабильно.

// 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».