Silverlight / Windows Phone 7 Эквивалент android.os.Handler - PullRequest
0 голосов
/ 20 июня 2011

Платформа Android имеет класс Handler для очередей сообщений или событий, запускаемых на более поздней стадии или в другом потоке. Я просматривал документы MSDN и сеть на предмет некоего эквивалентного API, доступного на платформе Windows Phone 7, но ничего не нашел.

Я мог бы реализовать эту услугу сам, но не хотел бы изобретать велосипед. Кто-нибудь нашел что-то подобное или есть какие-нибудь яркие идеи?

Ура, Алистер.

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Вот суть кода. Вам обязательно нужно будет внести изменения. Надеюсь, это поможет.

   private static Queue<Dictionary<string, string>> messages;
   ....
   {   
        ...
        AutoResetEvent ev = new AutoResetEvent(false);
        ...
        Dictionary<string, string> msg1 = new Dictionary<string, string>();
        msg1.Add("Id", "1");
        msg1.Add("Fetch", "Song1");
        Dictionary<string, string> msg2 = new Dictionary<string, string>();
        msg2.Add("Id", "2");
        msg2.Add("Fetch", "Song2");

        messages.Enqueue(msg1);
        messages.Enqueue(msg2);

        ThreadPool.RegisterWaitForSingleObject(
            ev,
            new WaitOrTimerCallback(WaitProc),
            messages,
            5000,
            false
        );

        // The main thread waits 10 seconds, to demonstrate the
        // time-outs on the queued thread, and then signals.
        Thread.Sleep(10000);
        ...
    }
    private static void WaitProc(object state, bool timedOut)
    {
        // The state object must be cast to the correct type, because the
        // signature of the WaitOrTimerCallback delegate specifies type
        // Object.
        Queue<Dictionary<string, string>> dict = (Queue<Dictionary<string, string>>)state;

        string cause = "TIMED OUT";
        if (!timedOut)
        {
            cause = "SIGNALED";
            //signaled to return. return without doing any work
            return;
        } 
        // timed out. now do the work 
        Dictionary<string, string> s1 = dict.Dequeue();
    }

`

0 голосов
/ 20 июня 2011

Не уверен, что вы ищете сервис для выполнения чего-либо в фоновом режиме или чего-то в потоке.Вы смотрели на ThreadPool класс для многопоточности?

Вы можете использовать ThreadPool.QueueUserWorkItem для запуска в другом потоке или использовать ThreadPool.RegisterWaitForSingleObject, чтобы зарегистрировать делегата для ожидания времени ожидания и запуска позже.

...