我遇到了一个小问题:
我编写了一个通信类,在数据到达时触发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。
到目前为止,谢谢。
答案 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 )
这可以解决问题!