2012-02-02 26 views
7

Thư viện của tôi đang sử dụng bộ nhớ bị cô lập nhưng chỉ thực hiện theo yêu cầu. Vì vậy, tôi đang sử dụng Lazy<T>.Dễ dàng tạo bộ nhớ bị cô lập

Tuy nhiên, điều này ném:

System.IO.IsolatedStorage.IsolatedStorageException "Không thể xác định việc cho phép sử để lắp ráp."

Lazy có làm gì đó lạ với chủ đề gây nhầm lẫn khi khởi tạo bộ nhớ riêng biệt không?

Mẫu mã:

using System; 
using System.IO.IsolatedStorage; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var thisWorks = IsolatedStorageFile.GetMachineStoreForAssembly(); 
      thisWorks.Dispose(); 

      var lazyStorage = new Lazy<IsolatedStorageFile>(IsolatedStorageFile.GetMachineStoreForAssembly); 

      var thisFails = lazyStorage.Value; 
      thisFails.Dispose(); 
     } 
    } 
} 

Full stack trace:

System.IO.IsolatedStorage.IsolatedStorageException was unhandled 
    Message=Unable to determine granted permission for assembly. 
    Source=mscorlib 
    StackTrace: 
    Server stack trace: 
     at System.IO.IsolatedStorage.IsolatedStorage.InitStore(IsolatedStorageScope scope, Type domainEvidenceType, Type assemblyEvidenceType) 
     at System.IO.IsolatedStorage.IsolatedStorageFile.GetMachineStoreForAssembly() 
     at System.Lazy`1.CreateValue() 
    Exception rethrown at [0]: 
     at System.IO.IsolatedStorage.IsolatedStorage.InitStore(IsolatedStorageScope scope, Type domainEvidenceType, Type assemblyEvidenceType) 
     at System.IO.IsolatedStorage.IsolatedStorageFile.GetMachineStoreForAssembly() 
     at System.Lazy`1.CreateValue() 
     at System.Lazy`1.LazyInitValue() 
     at System.Lazy`1.get_Value() 
     at ConsoleApplication1.Program.Main(String[] args) in C:\Users\Andrew Davey\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs:line 19 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: 

Trả lời

6

Hình như đó là vì bạn đang đi trong một MethodGroup (chứ không phải là một đại biểu/lambda trực tiếp), và nó không thể tìm ra nơi cuộc gọi ban đầu đến từ đó. Nếu bạn chuyển nó thành:

var lazyStorage = new Lazy<IsolatedStorageFile>(() => IsolatedStorageFile.GetMachineStoreForAssembly()); 

Nó sẽ hoạt động tốt.

Các vấn đề liên quan