0

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

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

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

非常感谢。

4

1 回答 1

0

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

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

如果你想让它不等待你当前的对话框,或者一个完整的

lock(mutexObject)
{
    raiseEvent();
}

如果你想让它等待。

我自己对 C# 的了解并不长,所以我不会尝试在那里回答这些问题,也不想将猜测作为知识传播:)

于 2016-04-20T14:08:18.323 回答