我有关于动态调用和线程的问题。让我们假设我有一个主线程,在某些时候会显示一个对话框。
public void showDialog()
{
lock(mutexObject)
{
flagDialogShowing = true;
showMssgDialog(properties...);
flagDialogShowing = false;
}
}
当我显示Dialog时,我的mainThread获取mutexObject并停止,直到用户单击“接受”按钮。所以我的主线是睡觉。如果用户不按下按钮,我们等待另一个线程中的事件。那些事件使用dynamicInvoke来调用前一个函数。在那种情况下,mainThread getUp如果我不使用flagDialog,它将显示第二个对话框。这是对的吗?如果线程未休眠,dynamicInvoke会做什么?它会等到mainThread停止?如果我关闭两个对话框,它知道如何继续执行会发生什么?它堆叠不同的callstack并知道如何恢复旧的上下文?
非常感谢。
答案 0 :(得分:0)
而不是那个标志,你可以让你的其他线程做一个
if(Monitor.TryEnter(mutexObject))
raiseEvent(...);
Monitor.Exit(mutexObject);
如果您希望它不等待您当前的Dialog或完整的
lock(mutexObject)
{
raiseEvent();
}
如果你想让它等待。
我自己并没有太长时间进入C#,所以我不会试图在那里回答那些问题,不想传播猜测作为知识:)