मैं सीओएस के साथ आईओएस प्रोजेक्ट पर काम कर रहा हूं। कार्यक्रम एक जुड़े वेबकैम से छवियों को कैप्चर करता है और इसे सॉकेट के माध्यम से आईफोन/आईपैड पर भेजता है। यह सब ठीक काम करता है और मैं डिवाइस पर अपनी स्ट्रीम को सफलतापूर्वक प्राप्त कर सकता हूं।प्रोग्राम निपटाने के बाद प्रोग्राम लटकता है()
लेकिन जब क्लाइंट डिस्कनेक्ट हो जाता है, तो वेबकैम बंद हो जाता है और इस फ़ंक्शन में, प्रोग्राम बस लटकता है। कोई त्रुटि संदेश नहीं और कोई अपवाद कॉल नहीं ... बस लटकता है! मेरा मानना है कि यह कई धागे के साथ एक समस्या है लेकिन दुर्भाग्य से मैं समाधान खोजने के लिए सी # में अनुभवी नहीं हूं। मुझे आशा है कि किसी को यहाँ सही रास्ते पर मुझे ला सकता है ...
कोड:
onImageCaptured समारोह:
public void OnImageCaptured(Touchless.Vision.Contracts.IFrameSource frameSource, Touchless.Vision.Contracts.Frame frame, double fps)
{
_latestFrame = frame.Image;
Console.WriteLine("OnImageCaptured");
if (isConnected)
{
Console.WriteLine("OnImageCaptured - isConnected");
byteArray = new byte[0];
MemoryStream stream = new MemoryStream();
_latestFrame.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
stream.Close();
byteArray = stream.ToArray();
if (byteArray.Length > 0)
{
string eof = "<EOF>";
byte[] eofByte = Encoding.ASCII.GetBytes(eof);
Console.WriteLine("OnImageCaptured - sendStream");
this.onDataSend(byteArray);
this.onDataSend(eofByte);
stream.Flush();
}
System.Diagnostics.Debugger.Log(0, "1", "\nByte Array Length: " + byteArray.Length.ToString());
}
pictureBoxDisplay.Invalidate();
}
कैमरा कक्षा में इस तरह परिभाषित किया गया है:
public event EventHandler<CameraEventArgs> OnImageCaptured;
और शुरू हो रहा:
OnImageCaptured.Invoke(this, new CameraEventArgs(bitmap, fps));
तो यह फ़ंक्शन - मुझे विश्वास है - रन यूआई के बाद से एक अलग खतरा में अवरुद्ध नहीं कर रहा है जब छवियों में आ रहे हैं
तो अगली ग्राहक वियोग इस समारोह में नियंत्रित किया जाता है:।
public void onDataSend(byte[] data)
{
clientReady = false;
try
{
socketWorker.Send(data);
}
catch (SocketException se)
{
isConnected = false;
Console.WriteLine("Error: Data Write - SocketException");
Console.WriteLine(se.ErrorCode.ToString());
thrashOldCamera() // THIS FUNCTION HANGS THE PROGRAM !!
onDisconnectServer();
// onDisconnectServer();
}
catch (ObjectDisposedException)
{
isConnected = false;
Console.WriteLine("Error: Data Write - ObjectDisposedException");
// onDisconnectServer();
}
}
क्लाइंट डिस्कनेक्ट, thrashOldCamera()
कहा जाता है। अभी तक ठीक काम करता है! अब:
private void thrashOldCamera()
{
Console.WriteLine("TrashOldCamera");
// Trash the old camera
if (_frameSource != null)
{
try
{
_frameSource.NewFrame -= OnImageCaptured;
Console.WriteLine("TrashOldCamera - 1");
_frameSource.Camera.Dispose(); // HERE IT HANGS. IT NEVER GOES PAST HERE !!!
Console.WriteLine("TrashOldCamera - 2");
setFrameSource(null);
Console.WriteLine("TrashOldCamera - 3");
pictureBoxDisplay.Paint -= new PaintEventHandler(drawLatestImage);
}
catch (Exception ex)
{
Console.WriteLine("End Trash Camera Ex: " + ex);
}
}
Console.WriteLine("End Trash Camera");
}
प्रोग्राम _frameSource.Camera.Dispose();
पर लटकता है। जैसा कि ऊपर बताया गया है, कोई त्रुटि या अपवाद नहीं है। यह एक समस्या हो सकती है कि onDataReceive()
को onImageCapture
फ़ंक्शन() के भीतर बुलाया जाता है। मैंने फ़ॉर्म में एक बटन भी जोड़ा जो thrashOldCamera()
ट्रिगर करता है और यह पूरी तरह से काम करता है।
किसी भी मदद/संकेतों की वास्तव में सराहना की जाती है।
http://channel9.msdn.com/Series/-NET-Debugging-Stater-Kit-for-the- प्रोडक्शन- पर्यावरण/डिग्नोज़िंग - एप्लिकेशन- Issues-01 –