Я портирую приложение для Android на Windows Phone 7, и, просматривая систему, просматривая документы пространства имен и различные учебные пособия и примеры в Интернете, я все еще пропускаю некоторые лакомые кусочки.
Что я выучил до сих пор:
1, чтобы создать поток и выполнить функцию в этом потоке:
using System.Threading;
...
Thread newThread = new Thread(new ThreadStart(MyMethod()));
newThread.Start();
2, для синхронизации объектов (аналогично ключевому слову synchronized () в Android):
lock(this)
{
// Do synchronized stuff here.
}
Чего мне не хватает:
3, Как я могу вызвать делегата из моего рабочего потока в вызывающем потоке ? Под «вызывающим потоком» я подразумеваю поток, который создал мой рабочий поток, а не сам рабочий поток. Например, на Android я бы сделал следующее (что вызвало бы это в главном потоке пользовательского интерфейса, также приемлемое решение):
Message.obtain(m_messageHandler, message, null).sendToTarget();
Я нашел AsyncCallback . Это делает то, что мне нужно? У кого-нибудь есть пример? Не очень понятно, какой поток вызывает процедуру обратного вызова.
4, На Android рабочий поток может сделать wait (), чтобы сделать паузу, пока вызывающий поток не вызовет interrupt (). Это похоже на Event и WaitForObject () в win32. Например на Android:
// Worker thread does:
synchronized (this)
{
wait();
}
...
// Main thread calls:
synchronized(this)
{
if(m_thread != null)
{
// Interrupt any wait()s.
m_thread.interrupt();
}
}
Как только поток прерывается, рабочий поток продолжает выполняться после вызова wait (). Отлично подходит для служебных потоков.
Любое руководство по № 3 и № 4 будет высоко ценится, спасибо!