动态调用和休眠线程

时间:2016-04-20 13:04:46

标签: c# multithreading dynamic-invoke

我有关于动态调用和线程的问题。让我们假设我有一个主线程,在某些时候会显示一个对话框。

public void showDialog()
{
    lock(mutexObject)
    {
        flagDialogShowing = true;
        showMssgDialog(properties...);
        flagDialogShowing = false;
    }
}

当我显示Dialog时,我的mainThread获取mutexObject并停止,直到用户单击“接受”按钮。所以我的主线是睡觉。如果用户不按下按钮,我们等待另一个线程中的事件。那些事件使用dynamicInvoke来调用前一个函数。在那种情况下,mainThread getUp如果我不使用flagDialog,它将显示第二个对话框。这是对的吗?如果线程未休眠,dynamicInvoke会做什么?它会等到mainThread停止?如果我关闭两个对话框,它知道如何继续执行会发生什么?它堆叠不同的callstack并知道如何恢复旧的上下文?

非常感谢。

1 个答案:

答案 0 :(得分:0)

而不是那个标志,你可以让你的其他线程做一个

if(Monitor.TryEnter(mutexObject))
    raiseEvent(...);
    Monitor.Exit(mutexObject);

如果您希望它不等待您当前的Dialog或完整的

lock(mutexObject)
{
    raiseEvent();
}

如果你想让它等待。

我自己并没有太长时间进入C#,所以我不会试图在那里回答那些问题,不想传播猜测作为知识:)