【发布时间】:2013-10-31 18:39:13
【问题描述】:
我正在使用 C# 和 gtk# 构建一个 GUI 应用程序。我最近遇到了一个问题,正在寻找解决这个问题的最佳方法:
我有一个弹出的模式窗口供用户输入数字。这个窗口是从我的主窗口访问的一个单独的窗口,它的设置如下:
public class MainWindow()
{
public NumberEntry numEntry;
每当我需要用户输入数字时,我都会在 NumberEntry 的公共 Window 属性上调用 ShowAll(),例如:
numEntry.win.ShowAll();
所有这一切都很好。之后,为了获取他们输入的值,我调用:
int entered = numEntry.valueEntered;
问题显然是代码在 ShowAll() 行完成后立即继续执行,并且 numEntry.valueEntered 始终为 0。我想做的(并且一直在尝试做的)是暂停 main线程,并在第二个线程中打开数字输入窗口,并在完成后加入主线程。当我尝试打开数字输入窗口时,暂停主线程似乎可以防止 GUI 更改导致程序冻结。如果可能的话,我还想避免使用回调方法,因为这会在一段时间后变得相当复杂。有什么建议吗?谢谢!
【问题讨论】:
-
ShowDialog 并返回 valueEntered as ModalResult?
-
嗯... ShowDialog 没有返回值:(
-
窗口比标准对话框更复杂(就像一个计算器,上面有 16 个按钮)您可以制作自定义对话框还是仅限于标准的取消、确定等?
-
或者某种将窗口作为模态对话框运行的解决方案......不过,对于这些东西来说,一般来说似乎没有太多文档。
-
原来 Dialog 是非常可编辑的,而且由于它的父类是 Window,所以它很容易。每当它让我回答我自己的问题时,我都会发布一个示例。
标签: c# multithreading mono gtk#