Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Xamarin Android中访问UI线程_C#_Multithreading_Xamarin_Xamarin.android - Fatal编程技术网

C# 在Xamarin Android中访问UI线程

C# 在Xamarin Android中访问UI线程,c#,multithreading,xamarin,xamarin.android,C#,Multithreading,Xamarin,Xamarin.android,我的应用程序发送和接收TCP字符串。其中一个字符串是根据字符串使对象可见。我的当前代码给出了System.NullReferenceException已被抛出对象引用未设置为对象的实例。 我找不到正确的访问方法,我猜RunOnUI似乎没有访问此权限 我当前的代码: Listener类:(完整类的片段,如果需要,我可以发布更多) public void ReadCallback(IAsyncResult ar) { MainActivity ma=新的MainActivity(); String

我的应用程序发送和接收TCP字符串。其中一个字符串是根据字符串使对象可见。我的当前代码给出了
System.NullReferenceException已被抛出对象引用未设置为对象的实例。

我找不到正确的访问方法,我猜RunOnUI似乎没有访问此权限

我当前的代码:

Listener类:(完整类的片段,如果需要,我可以发布更多)

public void ReadCallback(IAsyncResult ar)
{
MainActivity ma=新的MainActivity();
String content=String.Empty;
StateObject so=(StateObject)ar.AsyncState;
插座手柄=so.workSocket;
int bytesRead=handle.EndReceive(ar);
如果(字节读取>0)
{
so.sb.Append(System.Text.Encoding.ASCII.GetString(so.buffer,0,bytesRead));
content=so.sb.ToString();
}
if(content.IndexOf(“0”)>-1)
{
ma.RunOnUiThread(()=>
{
//这是传递接收到的数据的地方
分类数据(内容);
});
发送(句柄、内容);
}
其他的
{
BeginReceive(so.buffer,0,StateObject.BufferSize,0,新异步回调(ReadCallback),so);
}
}
以及SortData的代码:

public void排序数据(字符串数据)
{
如果(数据=“0”)
{
txtmsg.Visibility=ViewStates.Invisible;
}
}//这是唯一调用的代码,txtmsg.Visibility部分是调用后的错误生成器。

必须在构造函数中将上下文传递给类

因此,您可以向类中添加一个构造函数,如下所示:

MainActivity mContext;

public YourClass(MainActivity context) {
       this.mContext = context;
}
mContext.RunOnUiThread(() =>
     {
       //This is where the received data is passed
       mContext.SortData(content);
     });
然后从类中调用该方法,如:

MainActivity mContext;

public YourClass(MainActivity context) {
       this.mContext = context;
}
mContext.RunOnUiThread(() =>
     {
       //This is where the received data is passed
       mContext.SortData(content);
     });