C#表单show和infinity循环

时间:2012-01-15 21:53:12

标签: c# multithreading forms

在我的一个课程中,我有代码:

    private static void Notify(string url, string author, string mess)
    {
        Toast slice = new Toast(100000, url, author, mess) { Height = 90 };
        slice.Show();
        return;
    }

    public void Job()
    {
        Notify("http://google.com", "username", "hi all");
        while (true)
        {
            if (Run() == false)
                break;
        }
        /* .... */
    }

通知功能显示带有我的文本的小方框。它运行良好,但如果它在一个循环后,程序挂起。即如果在Notify("http://google.com", "username", "hi all");添加return;之后,程序将不会挂起。

我试图在另一个线程中创建此函数,但由于某种原因它无法正常工作并显示“白名单”。我做错了什么,在这种情况下你能做些什么?抱歉英语不好。

1 个答案:

答案 0 :(得分:0)

根据评论中的说法,我可能会为您提供解决方案。

首先,确保从主UI线程调用Job()。例如,直接在UI对象事件处理程序中,或在对UI对象的Invoke()方法的调用中。

然后我会按如下方式更改您的代码:

private static void Notify(string url, string author, string mess)
{
    using(Toast slice = new Toast(100000, url, author, mess) { Height = 90 })
    {
        slice.ShowDialog();
    }
}

public void Job()
{
    Notify("http://google.com", "username", "hi all");
}

请注意,我完全删除了循环,并使用ShowDialog()阻止与程序进一步交互,直到slice窗口关闭。

我还将slice放在using()块中,因为当你完成它时应该调用Dispose()