I hope someone can help me soving following problem. I have written a short demo-project which demonstrates the "System.InvalidCastException" I get when I try to send a message in a thread. Hope sombody can help me to fix that error. Here is the code (windows-application, visual c# 2005 professional):
CODE
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using SKYPE4COMLib;
using System.Threading;
using System.Collections;
namespace ChatThreadTest
{
public partial class Form1 : Form
{
private Skype skype = new Skype();
private Chat chat;
private string strMessage;
private Thread starter;
private int threadCounter = 0;
private Hashtable htbThread = new Hashtable();
public Form1()
{
InitializeComponent();
skype.MessageStatus += new _ISkypeEvents_MessageStatusEventHandler(skype_MessageStatus);
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
if (!skype.Client.IsRunning)
{
skype.Client.Start(false, true);
}
}
catch (Exception)
{
// All Skype Logic uses TRY for safety
}
try
{
skype.Attach(7, false);
}
catch (Exception)
{
//MessageBox.Show("Konnte nicht verbinden", "Verbindungsproblem", MessageBoxButtons.RetryCancel);
}
}
void skype_MessageStatus(ChatMessage pMessage, TChatMessageStatus Status)
{
if (pMessage.Status == TChatMessageStatus.cmsReceived || pMessage.Status==TChatMessageStatus.cmsSent)
{
chat = skype.get_Chat(pMessage.Chat.Name);
strMessage = pMessage.Body.ToLower();
switch (strMessage)
{
case "testthread":
{
threadCounter++;
htbThread.Add(threadCounter,new Thread(new ParameterizedThreadStart(startThread)));
starter = (Thread) htbThread[threadCounter];
starter.Start(threadCounter);
break;
}
}
//chat.SendMessage(strCommand);
}
}
private void startThread(object asdf)
{
while (true)
{
chat.SendMessage(((int)asdf).ToString());
Thread.Sleep(5000);
}
}
}
}
to get the exception start debugging and then write or receive in a chatroom: "testThread"
this is the exception detail:
CODE
System.InvalidCastException wurde nicht behandelt.
Message="Das COM-Objekt des Typs \"SKYPE4COMLib.ChatClass\" kann nicht in den Schnittstellentyp \"SKYPE4COMLib.IChat\" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID \"{8C24106C-3368-4580-93E5-5ED4ACCDE306}\" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Bibliothek nicht registriert. (Ausnahme von HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))."
Source="Interop.SKYPE4COMLib"
StackTrace:
bei SKYPE4COMLib.ChatClass.SendMessage(String MessageText)
bei SkypeChatBot.Form1.startThread(Object asdf) in C:\Dokumente und Einstellungen\Otis\Eigene Dateien\Visual Studio 2005\Projects\SkypeChatBot\SkypeChatBot\Form1.cs:Zeile 87.
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart(Object obj)
Someone knows what to do?