2010-05-14 3 views
2

Я разрабатываю приложение silverlight, где я использую webservices. Сервер отвечает за обработку некоторого текста, получает информацию о phoneme, конвертирует в visemes, генерирует аудио и кодирует в mp3. Возвращается список вейсемов и путь к созданию аудиофайла. Затем звук передается клиенту.Silverlight C# webservices ждут процесса

Но теперь у меня есть проблема. Мне нужно, чтобы сервер ожидал полного создания кодировки аудио. Иногда звук не готов, и он не передается клиенту. Я пробовал thread.join, но у него такая же проблема для длинных текстов.

Как должен быть лучший способ решить эту проблему?

Заранее спасибо

ответ

1

может быть, я неправильно понял ваш вопрос, но я думаю, что это не должно представлять большую проблему, как шаблон асинхронного должен реально помочь вам ... Мое интуитивное понимание этого сценария будет что-то вроде этого:

myWebServiceClient.ProcessTextCompleted += (sndr, evnt) => 
{ 
    IsBusy = false; 
    var url = evnt.Result.PathToCreatedAudioFile; 
    PlayAudioFile(url); 
}; 
IsBusy = true; 
myWebServiceClient.ProcessTextAsync("abcdefg"); 

Возможно, вы могли бы дать немного больше информации о том, почему это не работает для вашего дела.

Cheers, Алекс

+0

Я думаю, что проблема в том, что услуга является асинхронной, так что не ждет всех операций, чтобы закончить, он просто передает всю информацию. но поскольку функция кодирования может занимать больше времени, веб-служба получает требуемую информацию (адрес потока и т. д.), но файл еще не готов. Мне нужно дождаться процесса кодирования. Спасибо за помощь! :) –

+0

Ну, только сервер знает, когда именно обработка завершилась, поэтому я думаю, что он не должен возвращать ничего, прежде чем он действительно завершит обработку запроса, и файл будет готов. Возможно, проблема заключается в вашей серверной реализации, а не на стороне клиента. –

+0

Да, вот почему я создал поток для кодирования, а затем метод thread.join. но это не сработает. :( –

Смежные вопросы