我有一个奇怪的错误,请让我知道,如果您有原因的线索。

我有我的主要形式,这触发了一些更新,这也最终更新的主要形式UI上TimerSystem.Windows.Forms.Timer)。然后,我有一个编辑器,其被从主模使用ShowDialog()方法打开。在此编辑我有一个PropertyGridSystem.Windows.Forms.PropertyGrid)。

我无法重现每次它,但相当经常,当我使用下拉菜单在编辑器属性网格它卡住,即确定/取消按钮不关闭窗体属性网格变得不可用,关闭按钮在表格标题不起作用。

有在后台没有异常,如果我打破的过程中我看到的应用程序正在做有关我在开头提到的更新,一些计算。

什么可以推荐的吗?任何想法是受欢迎的。

有帮助吗?

解决方案

这是怎么回事的是,线程计时器的Tick方法不能在不同的线程中执行,所以直到把它完成它的锁定一切。我做了一个试验的WinForms应用程序,对它的定时器和2个按钮其事件这样做:

private void timer1_Tick(object sender, EventArgs e)
{
    Thread.Sleep(6000);
}

private void button1_Click(object sender, EventArgs e)
{
    timer1.Start();
}

private void button2_Click(object sender, EventArgs e)
{
    frmShow show = new frmShow();
    show.ShowDialog(); // frmShow just has some controls on it to fiddle with
}

和它确实像你描述阻断。以下解决了它:

private void timer1_Tick(object sender, EventArgs e)
{
    ThreadPool.QueueUserWorkItem(DoStuff);
}

private void DoStuff(object something)
{
    Thread.Sleep(6000);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top