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來完成的,進程的全局設置和管理,都應該找它來解決。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284279.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284279.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284279.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ArcGIS微課1000例】0050:Geodatabase屬性域操作全解

文章目錄 1. 屬性域的創建2. 屬性域的查看3. 屬性域的刪除與修改4. 屬性域的關聯地理數據庫按照面向對象的模型存儲地理信息,也可以將其非空間信息保存在表中。對于要素和表可以設置一些規則進行限制,對屬性的約束稱為屬性域。 屬性域是描述字段合法值的規則,是一種增強數據…

ctype.h

isalpha:int isalpha(char ch);檢查ch是否是字母.是字母返回非0,否則返回0。iscntrl: int iscntrl(int ch); 檢查ch是否控制字符(其ASCII碼在0和0x1F之間,數值為 0-31).是返回非0,否則返回 0.isdigit:int isdigit(char ch);檢查ch…

『JavaScript』核心

為什么80%的碼農都做不了架構師?>>> 弱類型語言 JavaScript是一種弱類型的語言。變量可以根據所賦的值改變類型。原始類型之間也可以進行類型轉換。其弱類型的物質為其帶來了極大的靈活性。 注意:原始類型使用值傳遞,復合類型使用…

優酷VIP會員周卡只需7.5元,看《沉香如屑》用優酷視頻

由楊紫、成毅主演的《沉香如屑》已上線7天。站內熱度值已經破萬,也拿下了4次日冠的好成績。追優酷視頻最新熱劇不能沒有優酷VIP會員啊,優酷的會員,價格算是最便宜的了,下面是幻海優品優酷VIP會員特價充值的價格。優酷VIP會員特價充…

Solr6.1.0Windows安裝步驟

一、 環境 solr 6.1.0 下載地址 http://archive.apache.org/dist/lucene/solr/6.1.0/ jdk 1.8 tomcat8 二、 安裝solr到tomcat 1.解壓solr,把 solr-6.1.0\solr-6.1.0\server 下的solr-webapp 文件夾拷貝到tomcat 的webapps下,重命名為solr;…

[轉]Autofac 框架初識與應用

一、前言 這上一篇中,主要講述了什么是IoC容器,以及了解到它是DI構造函注入的框架,它管理著依賴項的生命周期以及映射關系,同時也介紹實踐了在ASP.Net Core中,默認提供的內置IoC容器,以及它的實例注冊方式和相應的生命…

【ArcGIS微課1000例】0051:Geodatabase子類型操作全解

子類型是要素類中具有相同屬性的要素的子集,或表中具有相同屬性的對象的子集。可 通過它們對數據進行分類。 子類型是特征類(或對象類)中特征(或對象)的次級分類。例如一個公路線要素類可以根 據其字段類型的值細分為“高速公路”和“普通公路”兩個子類型。 子類…

作為Java程序員應該掌握的10項技能

本文詳細羅列了作為Java程序員應該掌握的10項技能。分享給大家供大家參考。具體如下: 1、語法:必須比較熟悉,在寫代碼的時候IDE的編輯器對某一行報錯應該能夠根據報錯信息知道是什么樣的語法錯誤并且知道任何修正。 2、命令:必須熟…

在Winform程序中設置管理員權限及為用戶組添加寫入權限

在我們一些Winform程序中,往往需要具有一些特殊的權限才能操作系統文件,我們可以設置運行程序具有管理員權限或者設置運行程序的目錄具有寫入的權限,如果是在操作系統里面,我們可以設置運行程序以管理員身份運行,或者設…

數據庫性能系列之索引(上)

前言上一次,我們從優化子查詢的角度,講解了一些簡單的數據庫性能優化方面的知識。通過優化子查詢的順序,包括合理使用IN和EXISTS,可以起到部分查詢的效率提升。但對于其他大多數場景,如單表記錄很大,或多表…

題目1023:EXCEL排序---------Case后面的是count,不是C

#include<stdio.h> #include<algorithm> #include<cstring> using namespace std;struct student {char num[10];char name[10];int grade; }s[100002]; int cmp1(student s1,student s2)//case 1 按照學號遞增 {return strcmp(s1.num,s2.num)<0; } int…

【ArcGIS微課1000例】0052:創建地理數據庫注記(標準注記、要素關聯注記、尺寸注記)

本文講述創建地理數據庫注記(標準注記、要素關聯注記、尺寸注記)的方法。 文章目錄 一、創建標準注記二、創建與要素關聯的注記三、創建尺寸注記一、創建標準注記 標準注記不與地理數據庫中的要素關聯。標準注記的一個例子是,地圖上標記某山脈的文字,沒有特定的要索代表該…

Lambda表達式超詳解

目錄 背景 Lambda表達式的用法 函數式接口 Lambda表達式的基本使用 語法精簡 變量捕獲 匿名內部類 匿名內部類中的變量捕獲 Lambda的變量捕獲 Lambda表達式在類集中的使用 Collection接口 List接口 Map接口 總結 背景 Lambda表達式是Java SE 8中的一個重要的新特性.…

用十條命令在一分鐘內檢查Linux服務器性能

這種干活必須要和大家分享的啊。 如果你的Linux服務器突然負載暴增&#xff0c;告警短信快發爆你的手機&#xff0c;如何在最短時間內找出Linux性能問題所在&#xff1f;來看Netflix性能工程團隊的這篇博文&#xff0c;看它們通過十條命令在一分鐘內對機器性能問題進行診斷。 概…

[javaEE] JDBC快速入門

JDBC&#xff1a;Java Data Base Connectivity java數據庫連接 1.組成JDBC的兩個包&#xff1a;主要是接口 java.sql javax.sql 2.相應JDBC的數據庫實現 在tomcat的目錄下面添加mysql-connector-java-5.0.8-bin.jar這個數據庫驅動包 package com.tsh.web;import java.io.IOExce…

【ArcGIS微課1000例】0053:注記(水平、沿直線、跟隨要素、牽引線、彎曲注記)的創建與編輯

文章目錄 一、創建注記1.創建注記要素類2. 水平注記3. 沿直線4. 隨沿要素5. 沿引線6. 彎曲二、修改注記1. 復制粘貼2. 移動注記3. 旋轉注記4. 刪除注記5. 堆疊和取消堆疊6. 向注記添加引線7. 將注記轉換為多部分8. 編輯關聯要素的注記一、創建注記 注記的創建方法參考:【ArcG…

定制.NET 6.0的依賴注入

本章是《定制ASP NET 6.0框架系列文章》的第三篇。在本章&#xff0c;我們將學習ASP.NET Core的依賴項注入&#xff08;DI&#xff09;以及如何自定義它。我們將討論以下主題&#xff1a;使用不同的DI容器探索ConfigureServices方法使用其他的ServiceProviderScrutor簡介技術準…

50 個 Redis 必備知識:基礎知識,架構、調優和監控知識及難點解決

本文包括&#xff1a;30 個 Redis 基礎知識&#xff1b;10個 Redis 架構和運維必懂的知識&#xff1b;Redis 調優、監控知識和10個具體應用難點。 本篇文檔已整理成pdf文檔&#xff0c;需要的同學文末自取 30 個 Redis 基礎知識 1、Redis支持哪幾種數據類型&#xff1f; Str…

【ArcGIS微課1000例】0043:ArcGIS繪制國界線的3種方法

本文講解ArcGIS繪制國界線的3種方法。 文章目錄 1. 直接修改國界線符號2. 緩沖區工具3. 制圖表達1. 直接修改國界線符號 直接修改國界線/省界線的符號。點擊“線要素”出現符號選擇器,點擊【編輯符號】按鈕,編輯成下面右圖的形式。缺點:只能在邊界一側出現緩沖樣式,如下面…