我有一個活性(與ISurfaceTextureListener):C#的Android - ISurfaceTextureListener線程中斷,然後用在我稱之爲異步SendPixel方法異步OnSurfaceTextureUpdated方法恢復時,活動關閉
public async void OnSurfaceTextureUpdated(SurfaceTexture surface)
{
bool sendPixel = false;
[...]
if (Settings.Pixel.period >= 0)
{
if (stopWatch.ElapsedMilliseconds >= Settings.Pixel.nextSending)
{
if (Settings.Pixel.period > 0)
Settings.Pixel.nextSending += Settings.Pixel.period * ((int)((stopWatch.ElapsedMilliseconds - Settings.Pixel.nextSending)/Settings.Pixel.period) + 1);
sendPixel = true;
}
}
[...]
if (sendPixel)
await SendPixel();
}
這裏是異步SendPixel方法:
async Task SendPixel()
{
try
{
if (Ev3Messaging.IsConnected())
{
Color color = new Color(bm.GetPixel(Settings.Camera.viewport.X_VpToCv(Settings.Pixel.x), Settings.Camera.viewport.X_VpToCv(Settings.Pixel.y)));
Ev3Messaging.AddNumberMessage("MC_Hue", color.GetHue());
Ev3Messaging.AddNumberMessage("MC_Brightness", color.GetBrightness());
Console.WriteLine("SendPixel");
await Ev3Messaging.SendMessages();
Console.WriteLine("SendPixelEnd");
}
}
catch (Exception ex)
{
Console.WriteLine("Error SendPixel: " + ex.Message);
}
}
ISurfaceTextureListener讀取視頻流,然後多次調用SendPixel方法。 問題在於控制檯很好地顯示「SendPixel」,但不顯示「SendPixelEnd」,並且不會引發錯誤。 之後,當我關閉活動時,會顯示每個缺失的「SendPixelEnd」。
編輯:EV3Messaging.SendMessages發送消息(藍牙)在前面的代碼加入:
static List<byte> btMessage = new List<byte>();
static public async Task SendMessages()
{
if (_socket != null)
await _socket.OutputStream.WriteAsync(btMessage.ToArray(), 0, btMessage.Count);
}
爲什麼這種情況發生,我怎麼能解決?
在此先感謝。
PS:對不起,我的英文不好^^
沒有代碼的'Ev3Messaging.SendMessages'無法確定原因。 – Gusman
哎呀,對不起,我要添加它。 –
好吧,似乎藍牙流不工作,當你關閉套接字時關閉應用程序,所有的操作結束。您是否在連接的設備上收到消息? – Gusman