从线程显示表单不能完美呈现

时间:2013-11-20 10:33:41

标签: c# multithreading winforms thread-safety xmpp

我正在使用jabber-net opensource库开发聊天应用程序.. 我的目的是在消息来临时显示一个表单(聊天窗口)。 但是当我使用这段代码时,Form会出现在任务栏中,而不是完美渲染...... 看起来像这样...更多我只能在鼠标悬停任务栏上的图标时看到表格(Hail Windows 7)......任何形式都是这样......

Click here for Output Image

我的代码就是这个......

    public jabber.client.JabberClient jabberClient1;
    jabberClient1.User = UserName;
    jabberClient1.Password = Password;
    jabberClient1.Resource = resource;
    jabberClient1.AutoRoster = true;
    jabberClient1.OnMessage += new MessageHandler(jabberClient1_OnMessage);

    private void jabberClient1_OnMessage(object sender, jabber.protocol.client.Message msg)
    {
        try
        {
            chatWindow chw = new chatWindow();
            chw.Left = 0;
            chw.Top = 0;
            chw.TopMost = true;
            //chw.LoadChat(msg.From.User, msg.From.Bare, "0");
            //chw.SetMessage(msg);
            chw.Show();
        }
    }

2 个答案:

答案 0 :(得分:1)

你必须使用chw.ShowDialog()

或使用if invokerequired

    private delegate void dlgInvokeRequired();

public void InvokeMethode()
{
    if (this.InvokeRequired == true) 
    {
     dlgInvokeRequired d = new dlgInvokeRequired(InvokeMethode);
     this.Invoke(d);
    } else 
    {
     chatWindow chw = new chatWindow();
     chw.Left = 0;
     chw.Top = 0;
     chw.TopMost = true;
     //chw.LoadChat(msg.From.User, msg.From.Bare, "0");
     //chw.SetMessage(msg);
     chw.Show();
    }
}

答案 1 :(得分:1)

我自己解决了...... 我必须使用

JabberClient1.InvokeControl = FormInstance; 

并且,应该在聊天窗口出现之前显示FormInstance .... 即,它可以是联系窗口(名册)....