Im Moment im Ausgabefenster in Visual Studio, ich erhalte die Meldung:
WARNUNG: Eine imageFrame-Instanz wurde nicht entsorgt
Ich habe viele Dinge versucht, um den DepthImageFrame zu entsorgen (Put-Logik). innen mit Block, Rückruf, wenn die asynchrone Funktion endet usw.), aber nach dem ersten Aufruf wird Null gesendet, also...
Das ist die richtige Art der Entsorgung das Objekt in async/await Ereignissen?
Code: Select all
MyWindow.xaml.cs
Code: Select all
private async void KinectSensorFound_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
// as suggested in Zoran Answer
await Task.Run(() =>
{
using (DepthImageFrame DataDepthImageFrame = e.OpenDepthImageFrame())
{
UpdateUserDepthInfo(DataDepthImageFrame);
}
});
}
public void UpdateUserDepthInfo(DepthImageFrame DataDepthImage)
{
var TimeNow = DateTime.Now;
if ((DateTime.Now - PreviusTime).Milliseconds
{
if (chckbxDepthImage.IsChecked == true)
{
chckbxColorImage.IsChecked = false;
// This method is called in my business logic to do a transformation with the frame
BitmapSource DepthBitMapSource = Controller.getInfoOfDepthUser(DataDepthImage);
DepthCanvas.Background = new ImageBrush(DepthBitMapSource);
}
else
{
DepthCanvas.Children.Clear();
DepthCanvas.Background = new SolidColorBrush(Colors.Transparent);
}
DepthUserInfo = Controller.DoGetInfoDepthUser(DataDepthImage);
lblDepthUser.Content = string.Format("{0:0.00} mts", DepthUserInfo / 1000);
}), DataDepthImage);
PreviousTime = TimeNow;
}
Code: Select all
KinectHelper.cs
Code: Select all
public BitmapSource getBitmapOfDepth(DepthImageFrame DataImageFrame)
{
DepthImagePixel[] ImageDepth = new DepthImagePixel[0];
int DepthDistance;
depthReturnStruct DepthReturn = new depthReturnStruct();
if (DataImageFrame != null)
{
ImageDepth = new DepthImagePixel[DataImageFrame.PixelDataLength];
DataImageFrame.CopyDepthImagePixelDataTo(ImageDepth); // exception here
//... other code
}
return bitmapDepth;
}