检查是否需要RunOnUiThread?

时间:2011-08-15 12:07:54

标签: android xamarin.android

我遇到了一个小问题: 我编写了一个通信类,在数据到达时触发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 我基本上需要Android的InvokeRequired。

到目前为止,谢谢。

2 个答案:

答案 0 :(得分:2)

您可以查看Android.OS.Looper个实例。 Android.OS.Looper.MyLooper()返回与当前线程关联的Looper;如果没有Looper,则返回null。同时,Looper.MainLooper(以及Context.MainLooper)是UI线程的Looper。因此:

if (Looper.MyLooper() != Looper.MainLooper)
{ 
    Action newAc;
    newAc = delegate { OnResponseData(ID, function, values); };
    this.m_Container.Form.RunOnUiThread(newAc);
    return;
}

答案 1 :(得分:0)

 ( this.m_Container instanceOf Activity ) 

这可以解决问题!