Alguien sabe porque explota el código siguiente

15/11/2006 - 14:59 por JC | Informe spam
Alguien sabe porque explota el código siguiente. Al parecer esta asociado a
la labor del Garbage Collector ???? Como lo soluciono?

Uso directivas del compilador para q el GC respete el objeto?



En un caso de prueba donde el folder seleccionado tiene 350 contactos, se
ejecuta hasta el contacto 86 y ahí explota. El error es





Microsoft.Office.Interop.Outlook._Application olApp = new
Microsoft.Office.Interop.Outlook.ApplicationClass();

Microsoft.Office.Interop.Outlook._NameSpace olNs =
olApp.GetNamespace("MAPI");

Microsoft.Office.Interop.Outlook._Folders oFolders =
olNs.Folders;

Microsoft.Office.Interop.Outlook.MAPIFolder aContacts =
olNs.PickFolder();

Microsoft.Office.Interop.Outlook.Items oItems = aContacts.Items;

for (int i = 0; i <= x; oItems.Count)

{

//Explota en la proxima linea luego de pasar por aqui unas 85 veces. No
tengo condiciones para testear en otros casos de

//prueba si este numero cambia. Supongo q sip.

Microsoft.Office.Interop.Outlook._ContactItem oContact =
(Microsoft.Office.Interop.Outlook._ContactItem)oItems[i];

//Do something with oContact

oContact = null;

}





Este Segundo caso da un error "Array index out of bounds" desde la primera
iteracion.



Microsoft.Office.Interop.Outlook._Application olApp = new
Microsoft.Office.Interop.Outlook.ApplicationClass();

Microsoft.Office.Interop.Outlook._NameSpace olNs =
olApp.GetNamespace("MAPI");

Microsoft.Office.Interop.Outlook._Folders oFolders =
olNs.Folders;

Microsoft.Office.Interop.Outlook.MAPIFolder aContacts =
olNs.PickFolder();

Microsoft.Office.Interop.Outlook.Items oItems = aContacts.Items;

int x = oItems.Count;

//Explota en la proxima linea.

for (int i = 0; i <= x; i++)

{

Microsoft.Office.Interop.Outlook._ContactItem oContact =
(Microsoft.Office.Interop.Outlook._ContactItem)oItems[i];

//Do something with oContact

oContact = null;

}

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
15/11/2006 - 15:52 | Informe spam
LC,

En el 1er. codigo, esta línea:

for (int i = 0; i <= x; oItems.Count)



no tiene sentido, i no se incrementa.

En el 2do, este bucle

int x = oItems.Count;

//Explota en la proxima linea.

for (int i = 0; i <= x; i++)

{



Está mal, lo correcto es el menor estricto:

for (int i = 0; i < x; i++)

Regards,

Octavio
Respuesta Responder a este mensaje
#2 JC
15/11/2006 - 20:08 | Informe spam
Tienes razon, pero ese no era el problema, eso solo es q q escribi mal el
codigo en el post. El problema era q el cast no se ejecutaba pq habia un
elemento distinto en la lista.

debi haber escrito

Microsoft.Office.Interop.Outlook.MAPIFolder oContacts =
olNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderContacts);
Microsoft.Office.Interop.Outlook.Items oItems = oContacts.Items;
for (int i = 1; i <= oItems.Count; i++)
{
Microsoft.Office.Interop.Outlook._ContactItem oContact =
(Microsoft.Office.Interop.Outlook._ContactItem)oItems[i];


El codigo original usaba foreach

Muchas gracias a ti.


"Octavio Hernandez" wrote in message
news:%
LC,

En el 1er. codigo, esta línea:

for (int i = 0; i <= x; oItems.Count)



no tiene sentido, i no se incrementa.

En el 2do, este bucle

int x = oItems.Count;

//Explota en la proxima linea.

for (int i = 0; i <= x; i++)

{



Está mal, lo correcto es el menor estricto:

for (int i = 0; i < x; i++)

Regards,

Octavio



Respuesta Responder a este mensaje
#3 Guillermo guille
16/11/2006 - 20:16 | Informe spam
zeñó, zeñó...

si es lo que yo digo... ¡¡¡además tenemos que ser adivinos!!! ;-)))

No te "mosquees", pero es que es un rollo esto de contestar a algo que no es
lo que se supone que quieres que te respondan y después resulta que lo que
preguntas está mal planteado o el código es erróneo...

Es que los que estamos acostumbrados a "responder" nos suele pasar, y a
veces, pues uno se "aburre" de que además de responder, pues... en fin...
tengas que adivinar que es lo que quieren que le respondan...
Pero seguimos viviendo con ello... o a pesar de ello... ;-)))

Nos vemos
Guillermo

El Guille cumple 10 años
http://aniversario.elguille.info/

"JC" escribió en el mensaje
news:O%
Tienes razon, pero ese no era el problema, eso solo es q q escribi mal el
codigo en el post. El problema era q el cast no se ejecutaba pq habia un
elemento distinto en la lista.

debi haber escrito

Microsoft.Office.Interop.Outlook.MAPIFolder oContacts =
olNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderContacts);
Microsoft.Office.Interop.Outlook.Items oItems =
oContacts.Items;
for (int i = 1; i <= oItems.Count; i++)
{
Microsoft.Office.Interop.Outlook._ContactItem oContact =
(Microsoft.Office.Interop.Outlook._ContactItem)oItems[i];


El codigo original usaba foreach

Muchas gracias a ti.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida