<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Indalcasa &#187; Aplicación</title>
	<atom:link href="http://www.indalcasa.com/tag/aplicacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.indalcasa.com</link>
	<description>Un blog de tecnologia</description>
	<lastBuildDate>Tue, 03 Jan 2012 15:14:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Controlar errores no controlados con C#</title>
		<link>http://www.indalcasa.com/programacion/dotnet-csharp/controlar-errores-no-controlados-con-c/</link>
		<comments>http://www.indalcasa.com/programacion/dotnet-csharp/controlar-errores-no-controlados-con-c/#comments</comments>
		<pubDate>Sat, 22 Sep 2007 17:58:12 +0000</pubDate>
		<dc:creator>Juan</dc:creator>
				<category><![CDATA[.Net (C#)]]></category>
		<category><![CDATA[Mono (C#)]]></category>
		<category><![CDATA[Aplicación]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[catch]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Exception]]></category>
		<category><![CDATA[Handler]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ThreadException]]></category>
		<category><![CDATA[try]]></category>
		<category><![CDATA[try catch]]></category>

		<guid isPermaLink="false">http://84.20.10.74/~indalcas/?p=20</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/controlar-errores-no-controlados-con-c/' addthis:title='Controlar errores no controlados con C# ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div>Algo que me gusta de PHP es su control de errores, ya que a pesar de no tener un tipo de error común, sino que tenemos que luchar contra errores y excepciones, dispone de dos funciones para controlaras como set_error_handler y set_exception_handler. Cuando desarrollo aplicaciones en C# echaba de menos estos algún método similar para [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/controlar-errores-no-controlados-con-c/' addthis:title='Controlar errores no controlados con C# ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/controlar-errores-no-controlados-con-c/' addthis:title='Controlar errores no controlados con C# ' ><a class="addthis_button_google_plusone" g:plusone:size="medium" ></a><a class="addthis_counter addthis_pill_style"></a></div><p>Algo que me gusta de <strong>PHP</strong> es su control de errores, ya que a pesar de no tener un tipo de error común, sino que tenemos que luchar contra errores y excepciones, dispone de dos funciones para controlaras como <strong>set_error_handler</strong> y <strong>set_exception_handler</strong>.</p>
<p>Cuando desarrollo aplicaciones en <strong>C#</strong> echaba de menos estos algún método similar para capturar excepciones, probé varias cosas lógicas, entre ellas antes de hacer nuestro <strong>Application.Run</strong>, englobarlo todo dentro de un <strong>try</strong> y <strong>catch</strong> al siguiente estilo:</p>
<blockquote>
<pre class="csharp"><span style="color: #0600FF;">try</span> <span style="color: #000000;">&#123;</span>
  Application.<span style="color: #0000FF;">Run</span><span style="color: #000000;">&#40;</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Formulario<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #000000;">&#125;</span> <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#123;</span>
  Application.<span style="color: #0000FF;">Run</span><span style="color: #000000;">&#40;</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Formulario<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #000000;">&#125;</span></pre>
</blockquote>
<p>Esto controlaba cualquier excepción, pero me cerraba la aplicación, una opción era volver a hacer un Application.run en el catch. Si fuera una calculadora hubiera valido, pero cuando se trata de una aplicación grande, no es una solución. Tampoco podemos dejarla al aire, puesto que cuando se lance una excepción, se cerrará la aplicación.</p>
<p>Buscando, buscando, encontré un evento llamado <strong>Application.ThreadException</strong>, que controlara todas aquellas excepciones que se produzcan dentro de <strong>Application.Run</strong>. Controlando este evento, no tendremos que catchear todo nuestro código, sino que definiremos una ventanita que recogerá la excepción y avisara al usuario de que se ha producido un error. Dentro de esta ventana, dependiendo de cuanto queramos trabajárnosla, podremos dar opción al usuario para enviar la traza de la excepción para que el equipo de desarrolladores, pueda reparar el error para futuras versiones o actualizaciones y así poco a poco, generar una aplicación grande desde el principio y robusta poco a poco si se van controlando aquellos errores que no son los más comunes.</p>
<p>A continuación os dejo el código de como controlar cualquier excepción desde el principio.</p>
<blockquote>
<pre class="csharp"><span style="color: #0600FF;">using</span> <span style="color: #000000;">System</span>
<span style="color: #0600FF;">using</span> <span style="color: #000000;">System</span>.<span style="color: #0000FF;">Windows</span>.<span style="color: #0000FF;">Forms</span>;
<span style="color: #0600FF;">using</span> <span style="color: #000000;">System</span>.<span style="color: #0000FF;">Threading</span>;namespace myespacio <span style="color: #000000;">&#123;</span>
&nbsp;
  <span style="color: #0600FF;">internal</span> <span style="color: #0600FF;">sealed</span> <span style="color: #FF0000;">class</span> MiPrograma <span style="color: #000000;">&#123;</span>
&nbsp;
    <span style="color: #000000;">&#91;</span>STAThread<span style="color: #000000;">&#93;</span>
    <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> Main<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> args<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
      Application.<span style="color: #0000FF;">ThreadException</span> +=
      <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> ThreadExceptionEventHandler
        <span style="color: #000000;">&#40;</span>MiPrograma.<span style="color: #0000FF;">excepcion</span><span style="color: #000000;">&#41;</span>;
&nbsp;
      Application.<span style="color: #0000FF;">Run</span><span style="color: #000000;">&#40;</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Formulario<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> excepcion<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender,
          ThreadExceptionEventArgs excepcion<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
      MessageBox.<span style="color: #0000FF;">Show</span><span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;Se ha producido un error&quot;</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre>
</blockquote>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.indalcasa.com/programacion/dotnet-csharp/controlar-errores-no-controlados-con-c/' addthis:title='Controlar errores no controlados con C# ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.indalcasa.com/programacion/dotnet-csharp/controlar-errores-no-controlados-con-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

