Pregunta

Tengo una propiedad de cadena que define un nombre de archivo para un archivo XML. Cuando el usuario introduce el nombre de archivo en la propiedad, que tienen la incubadora llamar a una función parseXML () inmediatamente después de establecer 'filename = valor' para rellenar un DataTable con los datos del archivo XML para que muestre en el diseñador. Por alguna razón, cuando tengo esta llamada de función en la incubadora propiedad, el colocador termina siendo cada llamada dos veces cada vez que cambio de la propiedad, con el segundo momento, una cadena vacía que provoca un error. ¿Por qué se hace esto?

public String FileName
{
    get { return fileName; }
    set 
    {
        fileName = value;
        parseXmlFile();
    }
}
¿Fue útil?

Solución

Respuesta corta: no debe. Más útil: puede que usted causa la segunda llamada a sí mismo? Ajuste el depurador en la incubadora y la segunda vez que se llama, inspeccione la pila de llamadas.

Otros consejos

Mi conjetura inicial sería que algo en parseXML () que está llamando de nuevo colocador. ¿Qué ocurre si se quita la llamada a parseXML ()? ¿Ha tratado de depuración y recorrer el código, ya que se está ejecutando para ver exactamente lo que está llamando la incubadora el segundo tiempo?

Si una palmada a un punto de interrupción en filename = value; y lo golpea, ¿qué muestra la ventana de pila de llamadas que usted?

Como completa a un lado para el problema que está teniendo, poniendo operaciones IO caras detrás de los emisores propiedad es un poco descentrado fuera.

Si desea abrir un archivo y analizar las cosas, etc, sería mejor tener un método separado apropiadamente llamado que hace el IO y conjuntos de este establecimiento (nombre del archivo) al final, cuando el método completó con éxito su trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top