6

Lütfen bu kısa konsol uygulama kodunu göz önünde bulundurun.Visual Studio'nun hata ayıklama özelliğinin "işlenmemiş özel durum" ifadesinin kırılmasını önleyin.

static void Main(string[] args) 
{ 
    try 
    { 
     Action a =() => 
     { 
      throw new ApplicationException("Oops"); 
     }; 

     var ar = a.BeginInvoke(null, null); 
     ar.AsyncWaitHandle.WaitOne(); 
     try 
     { 
      a.EndInvoke(ar); 
      Console.WriteLine("No message"); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 
    } 
    finally 
    { 
     Console.ReadKey(); 
    } 
} 

onun işlenmeyen şikayetçi throw kıracak Visual Studio çalıştırdığınızda. Hata ayıklayıcının dışında yürütüldüğünde, kod beklediğim şeyi yapar ("Oops" ifadesini görüntüler).

Visual Studio'nun, kodun gerçek dünyada olduğu gibi yürütülmesini sağlamak için nasıl ikna edebilirim?

+0

Lambda bir yöntem olsaydı, istenen etkiyi elde etmek için [DebuggerNonUserCode özniteliği] 'ni (http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggernonusercodeattribute.aspx) uygulayabilirsiniz. – dtb

+0

@dtb: Bu bir cevap vermek için iyi bir değer, ama lambdayı korumamı sağlayan bir alternatif görmek istiyorum. – AnthonyWJones

+0

sadece gözlem: Visual Studio, ar.AsyncWaitHandle.WaitOne() 'den çağrıldığında, denemede olan bir“ the.EndInvoke (ar) ”olmadığı zaman yakınıyor. –

cevap

2

DebuggerNonUserCode attribute, hata ayıklayıcıdan gizlemek için bir yönteme uygulayabilirsiniz.

+0

Anonim bir temsilci üzerine böyle bir öznitelik nasıl koyarsınız? –