Проверьте, необходим ли RunOnUiThread? - PullRequest
0 голосов
/ 15 августа 2011

Я застрял в небольшой проблеме: я написал класс связи, который запускает OnResponseData при поступлении данных.Теперь мне нужно проверить, является ли вызывающая сторона самой деятельностью или классом.

См. Этот код:

private void OnResponseData(ushort ID, byte function, byte[] values)
{
#if (winm || win7) // windows mobile or phone 7
    if (this.m_Container.Form.InvokeRequired)
        {
            this.m_Container.Form.BeginInvoke(new ModbusTCP.Master.ResponseData(OnResponseData), new object[] { id, function, values });
            return;
        }
#else
    if (??) // well this is the problem, what i need to check here?
    { 
        Action newAc;
        newAc = delegate { OnResponseData(ID, function, values); };
        this.m_Container.Form.RunOnUiThread(newAc);
        return;
    }
#endif
...

this.m_Container.Form - это мой Activity Мне в основном нужен InvokeRequired для Android.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

Вы можете проверить экземпляры Android.OS.Looper . Android.OS.Looper.MyLooper () возвращает Looper, связанный с текущим потоком; если нет Looper, то возвращается null. Между тем, Looper.MainLooper (а также Context.MainLooper ) является Looper для потока пользовательского интерфейса. Таким образом:

if (Looper.MyLooper() != Looper.MainLooper)
{ 
    Action newAc;
    newAc = delegate { OnResponseData(ID, function, values); };
    this.m_Container.Form.RunOnUiThread(newAc);
    return;
}
0 голосов
/ 15 августа 2011
 ( this.m_Container instanceOf Activity ) 

это решит проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...