J'essaie donc de verrouiller un fichier de stockage isolé dans mon application client C#, de sorte que plusieurs copies de mon application ne puissent pas y accéder en même temps. J'utilise la syntaxe suivante:Le verrouillage du fichier de stockage isolé .NET déclenche NRE
lockStream = new IsolatedStorageFileStream("my.lck", FileMode.OpenOrCreate, isoStore);
lockStream.Lock(0, 0);
Ce code provoque ma demande de jeter un NullReferenceException à l'intérieur de la méthode FileStream.Lock du cadre. J'ai essayé d'utiliser une valeur non nulle pour la longueur. J'ai essayé d'écrire un octet dans le fichier et de verrouiller juste cet octet. Peu importe ce que je fais, cette même NullReferenceException continue de me tourmenter. Est-ce que quelqu'un sait si cela est possible avec un stockage isolé?
Je suis également intéressé par l'utilisation de cette technique dans une application Silverlight, est-ce que Silverlight prend en charge le verrouillage de fichier? Les documents MSDN semblent indiquer que ce n'est pas le cas, mais j'ai vu this post d'un MVP C# qui le dit.
Mise à jour: Microsoft a corrigé le bogue que j'ai soumis sur Connect, mais il n'a pas été publié dans la version 4 du framework. Il devrait être disponible, espérons-le, dans le prochain SP ou version complète. Essayez une valeur supérieure à 0 pour la quantité de données à verrouiller.
j'ai pu contourner ce bug en utilisant la réflexion pour appeler la méthode de verrouillage sur le champ 'm_fs de privé du IsolatedStorageFileStream comme ceci: lockStream = new IsolatedStorageFileStream (« q.lck », FileMode.OpenOrCreate, isoStore); FileStream m_fs = typeof (IsolatedStorageFileStream) .InvokeMember (("m_fs"), BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance, null, lockStream, null) en tant que FileStream; m_fs.Lock (0, long.MaxValue); – bsiegel