Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C窗体应用程序可以在没有应用程序的情况下运行吗?_C#_Windows_Forms - Fatal编程技术网

C# C窗体应用程序可以在没有应用程序的情况下运行吗?

C# C窗体应用程序可以在没有应用程序的情况下运行吗?,c#,windows,forms,C#,Windows,Forms,我有一个最初用Java创建的库,但我想用C重写并更新它。我找到了IKVM,我可能不得不走这条路。但我的第一个选择是用C重写库 图书馆是一个教学工具,让人想起海龟图形或机器人卡雷尔。因此,我需要能够打开一个非模态窗口,同时仍然从主方法发送命令 为了模仿原版,我想使用类似于下面所示的代码来启动程序,因为这将加强对象声明和实例化的典型方式。顾名思义,MyCustomForm将是Form的一个子类 MyCustomForm myform=新的MyCustomForm 我已经在网站上搜索过了,但没有发现任

我有一个最初用Java创建的库,但我想用C重写并更新它。我找到了IKVM,我可能不得不走这条路。但我的第一个选择是用C重写库

图书馆是一个教学工具,让人想起海龟图形或机器人卡雷尔。因此,我需要能够打开一个非模态窗口,同时仍然从主方法发送命令

为了模仿原版,我想使用类似于下面所示的代码来启动程序,因为这将加强对象声明和实例化的典型方式。顾名思义,MyCustomForm将是Form的一个子类

MyCustomForm myform=新的MyCustomForm

我已经在网站上搜索过了,但没有发现任何其他类似的问题


这在C语言中可能吗?

不,不可能


Application.Run启动事件泵,允许应用程序响应事件。这包括来自用户的事件,例如单击、拖动、最大化、关闭以及来自O/S或您自己的程序的事件,例如重新绘制窗口、响应计时器、关闭O/S时关闭的请求。所有windows窗体应用程序都需要此类事件泵来提供典型功能。

是的,有几种方法。最简单的方法是定期打电话。下面是一个简短的示例,说明您可能如何编写它

    static class Program {
        static bool formClosed = false;
        [STAThread]
        static void Main() {
            MyCustomForm form = new MyCustomForm();
            form.Show();
            form.FormClosed += Form_FormClosed;
            while(!formClosed) {
                Application.DoEvents();
                Thread.Sleep(10);
            }
        }
        private static void Form_FormClosed(object sender, FormClosedEventArgs e) { 
            formClosed = true; }
    }

不过,还有比这个例子更好的解决方案。尽管你的应用程序不是游戏,但你想用谷歌搜索的术语是C game loop。

是的,只需在表单上使用ShowDialog,就像这样简单,然后当表单关闭时调用application.Exit。不需要使用Application.DoEvents; 在我的例子中,我使用它来允许用户与另一个用户再次登录。
所以我可以关闭我的主表单e,然后再次显示用户登录表单

您想实现什么?Application.Run调用启动应用程序和主窗口用于处理用户输入等的消息循环。UI在没有消息循环的情况下无法运行。听起来,在主线程中执行的任何操作实际上都应该在另一个线程中执行,以便主线程可以成为专用UI线程。删除[java]因为答案似乎与Java无关。您是否只想运行多个表单?在主窗体中,您可以执行myform.Show以将自定义窗体显示为非模式窗口。窗口/窗体是一个表示角色在其中交互的世界的显示。学生编写的代码将a。创造世界b。将字符添加到世界c。指示角色在该世界中执行某些任务。它不是典型的Windows窗体应用程序。窗口/表单根本不必与用户交互*。Main方法中的代码包含所有指令*最好有一个滑块,可以控制每一步之间的延迟长度。但这是可选的。谢谢!我会查一查。我在谷歌上搜索了C游戏循环,但我也不认为这是我需要的。我需要窗口打开并保持打开状态,直到手动关闭。但是我需要Main方法中的其余代码继续执行。我在下面提供了一些示例代码来说明这在Java中是如何工作的。我更改了名称,以使您更容易看到各种类的用途。这是我用Java创建和使用的一个教学工具。我正试图在C.MyCustomForm world=new MyCustomForm10,15中重新创建它//封闭表格的尺寸。Actor Actor 1=新的Actor//一个可以与世界互动的实体。AddActoractor1//将实体添加到world forint count=0;计数<10;计数++动作1.向前;Actor 1.左转45;'学生们像上面那样编写代码,并看到演员按照他们的指示操作。我无法正确显示代码块。不确定我做错了什么。Application.Run是一个主UI循环,它比这个做得更好。这只是一个更糟糕的版本。如果OP确实需要一个主UI循环,那么他们应该只调用Application.Run.Thank获得回复。也许您错过了我之前的评论,即我的表单不需要任何典型功能。事实上,它只需要保持开放直到关闭。这是一个非常非典型的用途。我已经能够在Java中完成这项工作,但可能无法在.NET中完成:-我不知道您在做什么,但我必须指出,在这种情况下,典型的功能包括窗体自身绘制的能力,例如,如果窗体顶部有另一个窗口,然后将其删除。如果表单不需要绘制任何内容,我想我不明白您为什么要从一开始就编写表单应用程序。它是一种可视化工具,用于教学编程,灵感来自Logo和Karel t的海龟图形
他是帕斯卡的机器人。在我的Java版本中,有表示虚拟世界的类和在虚拟世界中交互的参与者。世界只是一个子类JFrame。在main方法中,学生实例化世界和参与者,并编写代码指令来解决与虚拟环境相关的问题。它的行为更像是一个控制台应用程序,但他们可以直观地看到指令的执行。这就是为什么我不能使用这个应用程序。跑在窗口打开后运行的代码必须能够在窗口打开时运行。它必须自行绘制。如果它不能做到这一点,那么我可能无法使用C。没有真正的理由这样做,而不是使用Application.Run。Run的存在就是为了这个目的而存在的,虽然ShowDialog被设计为在不存在消息循环时创建消息循环,但它在语义上并不像Run那样指示消息循环的创建,使用ShowDialog也没有任何好处。正如我已经告诉我的原因,但你无法阅读,这允许用户再次进行日志记录,所以我可以关闭我的主窗体并再次打开登录窗体。如果我使用Application.Run,它将关闭我的应用程序。我已经在我的ERP上使用了它,它的工作非常完美。当使用Application.Run时,你可以做得很好。ShowDialog在这方面没有什么不同。