Avatar billede _et Praktikant
20. januar 2006 - 22:51 Der er 5 kommentarer og
1 løsning

Hvorfor denne fejl ?

An unhandled exception of type 'System.InvalidCastException' occurred in unread_mail_c.exe

Additional information: Specified cast is not valid.

-----------
Den opstår i denne linje "item = (Outlook.MailItem)lists.Items[i];" i for løkken


-----------
do
{
    Outlook.Application oApp = new Outlook.Application();
    Outlook.NameSpace oNameSpace= oApp.GetNamespace("MAPI");
    oNameSpace.Logon(Missing.Value,Missing.Value,false,true);
    Outlook.MAPIFolder lists = oNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox );
    Outlook.MailItem item;
    unread = 0;
    for(int i=1; i<lists.Items.Count; i++)
    {
        item = (Outlook.MailItem)lists.Items[i];
        if(item.UnRead) unread++;
    }
    Console.WriteLine("Antal ulæste beskeder = "+unread);


    F.Pulse_reset(adresse);
    F.wait_1sek();
    F.Pulse_mail(adresse, unread);

    for (int i = 0 ; i < tid_check ; i++ )
        F.wait_1sek();

}while (true);
Avatar billede sovsekoder Nybegynder
20. januar 2006 - 23:06 #1
det åbenlyse (og ikke særligt hjælpsomme) svar er:
lists.Items[i] er ikke af typen (Outlook.MailItem).

Jeg er ikke ekspert i Outlook programmering. Men mit gæt vil nok være at du har "subfolders" inde under din inbox. Disse subfolders er nok ikke af typen "Outlook.MailItem".

så koden burde nok være noget i denne stil:
item = lists.Items[i] as (Outlook.MailItem);
if(item != null)
{
  if(item.UnRead) unread++;
}

.... men jeg vil alligevel råde dig til at sætte en debugger på og lave noget i denne stil:
item = lists.Items[i] as (Outlook.MailItem);
if(item != null)
{
  if(item.UnRead) unread++;
}
else
{
  // Sæt et breakpoint her!!
  int blah = 8;
}

- og sætte et breakpoint i "else" blokken. Når debuggeren breaker kan du undersøge hvilken type "item" i virkeligheden er. Herefter kunne du lave en søgning på msdn.microsoft.com efter den specifikke type og læse lidt mere om hvad det er...

held&lykke :D
Avatar billede _et Praktikant
20. januar 2006 - 23:14 #2
Det var fordi der var en error message, fra min exchange, den er åbenbart ikke af samme type som mails ??
Da den blev slettet, virkede det.

Kan jeg lave en test på typen, og så kun tælle på, hvis det er den rigtige type?
Avatar billede sovsekoder Nybegynder
20. januar 2006 - 23:25 #3
ja... der er flere muligheder:

1. denne mulig hed sætter item = null hvis typen ikke kan castes
item = lists.Items[i] as (Outlook.MailItem);
if(item != null)
{
  if(item.UnRead) unread++;
}

2. et tjek af typen...hvis typen passer udføres arbejdet
if(item.GetType() == typeof(Outlook.MailItem))
{
  // type is ok... do it!
}
Avatar billede sovsekoder Nybegynder
20. januar 2006 - 23:26 #4
ja ok... den sidste mulighed, skulle være:

if(lists.Items[i].GetType() == typeof(Outlook.MailItem))
{
  if(item.UnRead) unread++;
}
Avatar billede _et Praktikant
21. januar 2006 - 00:17 #5
Det virkede!
Jeg takker for hjælpen
Avatar billede sovsekoder Nybegynder
21. januar 2006 - 10:53 #6
det var så lidt... jeg ligger et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Analytiker til Security Operations Center i Cyberdivisionen

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Ingeniør til Satellitkommunikation

Netcompany A/S

Managing Architect

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Teknisk systemansvarlig / ingeniør inden for taktisk datalink