Java.Util.Concurrent.PriorityBlockingQueue m_sensorDataQueue = new Java.Util.Concurrent.PriorityBlockingQueue();
m_sensorDataQueue.Add(c# to java object);
var queue = new ConcurrentQueue<TObject>();
// queue stuff
queue.Enqueue(myObject);
queue.Enqueue(myOtherObject);
// peek
queue.TryPeek(out var result);
// dequeue
queue.TryDequeue(out var result);
public class MyCSharpObjectJava : Java.Lang.Object
{
public MyCSharpObject MyObject;
public MyCSharpObjectJava(MyCSharpObject myObject)
{
MyObject = myObject;
}
}
2条答案
按热度按时间inn6fuwd1#
您可能正在寻找ConcurrentQueue,您可以在NuGet System.Collections.Concurrent中找到它。
用法如下:
其中
TObject
是对象的类型。jobtbby32#
对于那些寻找答案的标题:"如何在Xamarin Android中将C#对象转换为Java.Lang.Object?",我可以用一个 Package 类来实现这一点。不确定这是否是最好的方法,但我可以将我的C#对象存储为Java.Lang.Object的属性。老实说,我不知道这有多可靠或内存效率/线程安全等,但我的C#类是所有信息:没有方法,只有简单数据类型的属性。
如果您可以访问C#对象类,并且它还不是一个扩展另一个类的类,并且您不关心该代码中是否编译了java,则可以使C#类扩展Java.Lang.Object:
如果不可能(您无法访问原始类,或者需要将其保留为C#对象以支持iOS等其他平台),则可以创建一个 Package 器来扩展Java.Lang.Object并使用C#类型作为属性:
创建新示例:
然后在另一端访问原始类:
这就是我如何能够取得我的C#类对象示例,将其分配给一个java.lang.object Package 器并将其存储在Google Maps Android Api标记器上作为Tag,然后在点击标记器时,能够将其转换回原始对象。