这就是我想要做的事情
private KinectAudioSource CreateAudioSource()
{
var source = KinectSensor.KinectSensors[0].AudioSource;
source.NoiseSuppression = _isNoiseSuppressionOn;
source.AutomaticGainControlEnabled = _isAutomaticGainOn;
return source;
}
private object lockObj = new object();
private void RecordKinectAudio()
{
lock (lockObj)
{
using (var source = CreateAudioSource())
{
}
}
}
'using'语句给出了一个错误,指出 - “'Microsoft.Kinect.KinectAudioSource':在using语句中使用的类型必须可以隐式转换为'System.IDisposable'”。如何消除此错误及其含义是什么?
答案 0 :(得分:17)
我参加聚会很晚,但我应该说:
如果在使用语句中使用上下文时出现此错误,则必须添加reference to Entity Framework
。
答案 1 :(得分:14)
您可以这样创建:
public class HelloTest : IDisposable
{
void IDisposable.Dispose()
{
}
public void GetData()
{
}
}
之后你可以创建像
这样的对象using (HelloTest Ht = new HelloTest())
{
Ht.GetData();
}
我希望以上示例有用
答案 2 :(得分:5)
创建新项目时遇到类似问题我忘了通过Nuget Package Manager安装ENTITY FRAMEWORK。很抱歉,如果这与kinect无关,但是当我在VS中寻找错误时谷歌就把我带走了。
答案 3 :(得分:4)
Using
关键字需要IDisposable
接口实现。如果您收到错误'Microsoft.Kinect.KinectAudioSource':type used in a using statement must be implicitly convertible to 'System.IDisposable.
所以这意味着Joachim说KinectAudioSource
不是IDisposable
。
您可以使用
而不是using
try
{
Execute();
}
finally
{
CleanupPart();
}
using
相当于try-finally
。当你想最终清理内部并且不关心异常时,你将只使用try-finally
。
答案 4 :(得分:0)
类KinectAudioSource
应该实现IDisposable
接口以便与using块一起使用。未实现Idisposable的类无法在using语句中实例化。
通常,当您使用IDisposable objAs规则时,使用时 IDisposable对象,您应该在using中声明并实例化它 声明。 using语句在对象上调用Dispose方法 以正确的方式,(当你使用它如前所示)它也 一旦Dispose出现,就会导致对象本身超出范围 调用。在using块中,该对象是只读的,不可以 修改或重新分配,MSDN
答案 5 :(得分:0)
KinectAudioSource
不是IDisposable
,因此无法在using
块中使用。您可能要做的是关闭数据流(which does implement IDisposable),而不是在完成录制时,等等;
private Stream CreateAudioStream()
{
var source = KinectSensor.KinectSensors[0].AudioSource;
source.NoiseSuppression = _isNoiseSuppressionOn;
source.AutomaticGainControlEnabled = _isAutomaticGainOn;
return source.Start();
}
private object lockObj = new object();
private void RecordKinectAudio()
{
lock (lockObj)
{
using (var source = CreateAudioStream())
{
}
}
}
答案 6 :(得分:0)
同样从System.EnterpriseServices版本2添加.NET引用将解决该错误。如果您要转换旧版本并且多次出现“使用”关键字以替换
,则此功能尤其有用答案 7 :(得分:0)
发生System.IDisposable错误是因为您尝试打开的连接可能不会自动关闭,超出打开连接的范围。
从using()子句中排除模型连接创建,以便它保持为:
var source = new CreateAudioSource(); / * 其余的代码在这里 * /
另外,请确保您不会省略对象创建的“new”关键字。
答案 8 :(得分:0)
在创建新的控制台应用程序时,我遇到了类似的问题。我忘记在项目中添加ENTITY FRAMEWORK参考。
添加有关ENTITY FRAMEWORK解决问题的参考。
答案 9 :(得分:-1)
您应该将System.Data.Linq
添加到项目中的参考文献中。这解决了我的问题。