C'est ce que j'essaie de faire
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())
{
}
}
}
L'instruction 'using' donne une erreur qui indique: "'Microsoft.Kinect.KinectAudioSource': le type utilisé dans une instruction using doit être implicitement convertible en 'System.IDisposable'". Comment puis-je éliminer cette erreur et qu'est-ce que cela signifie?
Je suis très en retard à la fête, mais je devrais dire:
Vous devez ajouter un reference to Entity Framework
si vous obtenez cette erreur lors de l'utilisation du contexte à l'intérieur de statement.
Vous pouvez créer comme ça:
public class HelloTest : IDisposable
{
void IDisposable.Dispose()
{
}
public void GetData()
{
}
}
ensuite, vous pourrez créer un objet comme
using (HelloTest Ht = new HelloTest())
{
Ht.GetData();
}
J'espère que ci-dessus l'exemple utile
J'ai eu un problème similaire lors de la création d'un nouveau projet, j'avais oublié d'installer ENTITY FRAMEWORK via Nuget Package Manager. Désolé si cela ne concerne pas kinect mais c’est là que Google m’a emmené alors que je cherchais l’erreur dans VS.
Using
mot-clé requis IDisposable
implémentation de l'interface. Si vous obtenez une erreur 'Microsoft.Kinect.KinectAudioSource':type used in a using statement must be implicitly convertible to 'System.IDisposable.
Cela signifie donc que, comme Joachim l’a dit, KinectAudioSource
n’est pas IDisposable
.
Au lieu de using
, vous pouvez utiliser
try
{
Execute();
}
finally
{
CleanupPart();
}
using
est équivalent try-finally
. Vous n'utiliserez que try-finally
lorsque vous souhaitez effectuer un nettoyage final à l'intérieur sans vous soucier de l'exception.
J'ai eu un problème similaire lors de la création d'une nouvelle application console. J'avais oublié d'ajouter une référence ENTITY FRAMEWORK dans mon projet.
Ajout d'une référence sur le problème de résolution ENTITY FRAMEWORK.
La classe KinectAudioSource
est supposée implémenter l'interface IDisposable
pour pouvoir utiliser un bloc. Les classes qui n'implémentent pas Idisposable n'ont pas pu être instanciées à l'aide de statement.
En règle générale, lorsque vous utilisez un objet identifiable comme règle, lorsque vous utilisez un fichier Objet IDisposable, vous devez le déclarer et l’instancier dans un using déclaration. L'instruction using appelle la méthode Dispose sur l'objet correctement, et (lorsque vous l’utilisez comme indiqué précédemment), il ajoute également provoque la sortie de l'objet lui-même dès que Dispose est appelé. Dans le bloc using, l'objet est en lecture seule et ne peut pas être modifié ou réaffecté, MSDN
Ajouter également une référence .NET à partir de System.EnterpriseServices version 2 résoudra l’erreur. Ceci est particulièrement utile si vous convertissez depuis une version antérieure et que vous avez plusieurs occurrences du mot clé "using" à remplacer.
KinectAudioSource
n'est pas IDisposable
, il ne peut donc pas être utilisé dans un bloc using
. Ce que vous voulez probablement faire est de fermer le flux de données ( qui implémente IDisposable ) à la place lorsque vous avez terminé l’enregistrement, quelque chose comme:
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())
{
}
}
}
L'erreur System.IDisposable se produit car la connexion que vous tentez d'ouvrir risque de ne pas se fermer automatiquement lorsque la connexion a été ouverte.
Excluez la création de votre connexion de modèle de la clause using (), afin qu’elle reste comme suit:
var source = new CreateAudioSource (); /* Reste du code ici * /
Veillez également à ne pas omettre le mot-clé "nouveau" pour la création d'objet.