WinForm(一):开始一个WinForm程序

WinForm程序只能运行在Windows上,即使是基于.NET5,6,7也一样。因为WinForm的UI层对接的底层API是基于Windows的。

用VisualStudio创建一个WinForm应用很简单,建议使用非.NET Framework版,因为.NET Framework微软渐渐不支持了,即使出了bug。

f0d0f4ec4f141a67f357c6a6cfded5f7.png

本篇分享两个技术点,STAThreadAttribute和Application。

  • STAThreadAttribute

WinForm肯定是遵守从Main入口的,程序结构典型的C#程序的层次结构:命名空间->类型->方法

namespace WinFormDemo01
{
     internal static class Program
    {
        [STAThread]
        static void Main()
        {
            ApplicationConfiguration.Initialize();
            Application.Run(new Form1());
        }
    }
}

不一样的是[STAThread],这个特性在Main函数上面,也只有在这里会起作用。它完整写法是STAThreadAttribute,指示应用程序的 COM 线程模型是单线程单元 (STA)。

注:

COM( Component Object Model)组件对象模型 :定义了一个二进制互操作性标准,用于创建在运行时交互的可重用软件库。

Aparment叫套间:是线程模型概念的一个继承者,实现是一个结构而已。如查一个套间是STA,那么这个套间有且只有一个线程和其关联。

Single-threaded Apartments单线程套间:是COM提供的线程模型之一。

如果不声明STAThread会出现什么情况呢?假如在Form1上放一个按钮,按钮单击后执行下面的代码:

this.Text=(string?)Clipboard.GetDataObject()?.GetData(DataFormats.Text);

不声明STAThread就会报一个ThreadStateException类型的异常,Message是“在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记”。因为剪切板是系统的,需要通过COM协议来访问,如果应用不是STA的,会限制对其访问。

  • Application

Main方法里有Application对象,这里可以看作是一个程序,或一个进程序,代表当前程序,第一行是配置的初始化,这个方法也是近期提升成一个方法,方法里是对WinForm可视化,应用渲染,高DPI的一些配置。第二行就是启动就用了,Run里的窗体就是主窗体,如果关闭主窗体程序会退出,或者调用Application.Exit(),应用也会退出。

Application,代表应用,它可以全局设置一些程序的信息,订阅一些应用的事件,比如主线程退出,应用退出,全局异常捕获等。同时还提供了一些方法,比如应用重启,和各种全局设置方法。

19c0e5c48ea072ea303a75396ccfb2cb.png

本篇只是简单介绍了两个技术点,一个是WinForm启动时,通过在Main方法添加特性STAThread来声明这是一个COM线程模型是单线程单元;另一个知识点是整个WinForm进程的管理是通过Application来完成的,进程的全局设置和管理,都应该找它来解决。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要用WinForm编写一个上位机服务器程序,需要以下步骤: 1. 创建一个WinForm项目 2. 在项目中添加服务器代码,实现监听客户端连接请求,接收和发送数据。 3. 使用控件(例如文本框,按钮等)进行用户界面的设计。 4. 实现客户端的连接与断开管理,以及对客户端请求的处理。 5. 调试并完善代码,使服务器程序稳定运行。 希望这些步骤能够帮助你编写一个WinForm上位机服务器程序。 ### 回答2: WinForm一个基于Windows Forms的用户界面框架,用于创建Windows应用程序。编写一个上位机服务器程序,可以通过WinForm实现。 首先,我们需要创建一个WinForm应用程序的框架。通过添加一个主窗体(Form),我们可以设计并布局用户界面,包括按钮、文本框、标签等控件,以便用户与程序进行交互。 接下来,我们需要编写代码来实现服务器功能。使用C#编程语言,我们可以使用TCP或UDP网络协议来建立服务器。可以使用Socket类来创建一个服务器套接字,监听来自客户端的连接请求。 服务器程序需要处理来自客户端的请求,并根据请求进行相应的处理。可以在主窗体的事件处理程序中编写代码来处理点击按钮、接收客户端消息等事件。 为了使服务器程序能够同时处理多个客户端的连接请求,我们可以在程序中使用多线程来实现。可以为每个连接请求创建一个新的线程,并在线程中处理客户端的请求。 在服务器程序中,还需要实现数据的收发功能。可以使用网络流来读取和写入数据。根据具体需求,可以设计协议来规定客户端和服务器之间的数据交互格式。 最后,在主窗体的事件处理程序中,我们可以更新用户界面,以便用户可以实时看到服务器的状态和与之进行交互。 总结来说,编写一个上位机服务器程序,需要使用WinForm来创建用户界面,并使用C#编程语言来编写服务器功能。通过设计协议、使用多线程和网络流来实现与客户端的数据交互,最后更新界面以供用户使用。 ### 回答3: WinForm是一种用于编写Windows应用程序的用户界面开发工具,可以帮助开发人员创建功能强大的上位机服务器程序。在这个项目中,我们可以按照以下步骤进行开发: 1. 创建项目:在Visual Studio中创建一个新的WinForm项目。 2. 设计用户界面:使用WinForm提供的各种控件创建用户界面,例如按钮、文本框、列表框等。这些控件可以用于与用户进行交互,例如输入IP地址和端口号、启动和停止服务器等操作。 3. 添加服务器功能:利用C#编写代码,实现服务器的功能。可以使用TCP或UDP协议进行网络通信,并使用Socket类连接服务器和客户端。在代码中,可以设置服务器开始监听指定的IP地址和端口号,并处理来自客户端的请求。 4. 处理客户端请求:当客户端与服务器建立连接后,服务器会接收来自客户端的请求并进行处理。可以根据实际需求编写相应的代码逻辑,例如接收和发送数据,根据数据进行计算和处理等。 5. 提供界面反馈:可以在服务端界面中添加日志输出、状态指示器等控件,以提供更好的用户体验。例如,可以在界面上显示连接成功、数据传输、错误提示等信息,使用户能够直观地了解服务器的运行状态。 6. 程序测试和调试:在完成上述步骤后,进行测试和调试以确保服务器程序的正常运行。可以模拟多个客户端与服务器建立连接,测试服务器的并发处理能力和稳定性。 最后,可以根据实际需求进行功能扩展,例如添加数据库支持、加密传输、权限控制等功能,以满足不同项目的要求。通过WinForm开发上位机服务器程序,可以方便地创建一个直观友好、功能强大的应用程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值