【发布时间】:2013-02-18 20:32:39
【问题描述】:
当我关闭我的 WPF 应用程序时,我遇到了一个令人费解的处置对象问题。如果您发现我的逻辑中有任何错误,请指出。
我有一个带有update() 方法的ColorManager 类,如下所示。
public void Update(ColorImageFrame frame)
{
byte[] pixelData = new byte[frame.PixelDataLength];
frame.CopyPixelDataTo(pixelData);
if (Bitmap == null)
{
Bitmap = new WriteableBitmap(frame.Width,
frame.Height,
96,
96,
PixelFormats.Bgr32,
null);
}
// draw bitmap
RaisePropertyChanged(() => Bitmap);
}
我在单独的线程中运行此方法。在我的MainWindow.xaml.cs 我有以下内容:
private void Initialise()
{
if (kinectSensor == null)
return;
// start kinect sensor
kinectSensor.Start();
updateColourStreamThread = new Thread(new ThreadStart(colorStreamDisplay));
updateColourStreamThread.Name = "updateColourStreamThread";
updateColourStreamThread.Start();
// ...some more codes
}
void colorStreamDisplay()
{
while(isDisplayActive)
{
using (var frame = kinectSensor.ColorStream.OpenNextFrame(500))
{
if (frame == null) continue;
if (displayDepthStream) continue;
Dispatcher.Invoke(new Action(() => colorManager.Update(frame)));
}
}
}
我在MainWindow.xaml.cs 中有以下方法可以在单击关闭按钮后进行清理。
private void Clean()
{
isDisplayActive = false;
// some other codes
if (kinectSensor != null)
{
updateColourStreamThread.Abort();
updateDepthStreamThread.Abort();
updateSkeletonStreamThread.Abort();
kinectSensor.Stop();
kinectSensor = null;
Console.WriteLine("Closed successfully");
}
单击关闭按钮后,我的应用程序在frame.CopyPixelDataTo(pixelData); 上抛出“无法访问已处置的对象”。
我将 bool 值切换为 false 以停止循环,然后中止线程并停止 kinect 设备。
我错过了什么?
【问题讨论】:
标签: c# wpf kinect objectdisposedexception