C# 积木模块 ABC(一)(转自新一代技术网)

第一个C#程序:经典例程Hello World

“Hello World”可以说是学习每一种编程语言的第一个例程了。我们可以在NotePad、Wordpad等任何编辑器中输入以下的C#代码,并保存为helloworld.cs,最后在命令行中执行csc helloworld.cs来运行文件:

// using system
using System;
class Hello
{
static void Main() { // display output on console
Console.WriteLine("Hello,C# World!");
}
}

用OpenFileDialog类浏览或打开文件

同VC++中CfileDialog的 Open 方法相同,C#中的OpenFileDialog类可用于打开一个文件。这个类是从FileDialog派生出来的。用这个类中的 OpenFile方法打开一个文件,然后就可以通过流(steam)来读取这个文件。

请看下面的例程代码,它使用 OpenFileDialog类浏览一个文件:

OpenFileDialog fdlg = new OpenFileDialog();
fdlg.Title = "C# Corner Open File Dialog" ;
fdlg.InitialDirectory = @"c:\" ;
fdlg.Filter = "All files (*.*)|*.*|All files (*.*)|*.*" ;
fdlg.FilterIndex = 2 ;
fdlg.RestoreDirectory = true ;
if(fdlg.ShowDialog() == DialogResult.OK)
{
textBox1.Text = fdlg.FileName ;
}

Title一行设置打开对话框的标题,Filter一行为打开的文件类型设置一个过滤器,FileName一行包含了所选中的文件名。

下图就是运行的结果:

从C#中调用COM组件

.NET框架是COM的一个自然发展,两者共享许多核心要素,这包括组件的再利用以及语言的中立性。为了向后兼容,COM Interop可以使用现存的COM组件而不要求对原始组件进行修改。当一个 .NET 框架开发人员想将COM代码合并到一个管理应用程序中时,就可以用COM Interop功能引入相关的COM类型。引入之后,这个COM类型就可以使用了。这属于前期连接。但是有时候你需要对象的后期连接,这在.NET中也能实现,使用名称空间映射就可以通过后期连接来调用COM对象。

这里介绍一个应用程序例程,它将调用Excel,并且通过使用后期连接使它可视。

后期连接将使用Reflectionb的Type类,这个Type类有许多方法可以取得COM对象,就象我们已经使用过的 GetTypeFromProgID("Application"),这个方法从系统注册表中得到COM ID,然后使用STATIC类的成员 Activator.CreateInstance()创建这个COM对象的一个新例示。

要想调用COM对象的方法、函数和属性,就必须使用包含正确设置的Type对象的InvokeMethod()方法。这个方法接受一些参数变量,其中最重要的一个是方法类型的ex属性(get或set)。在例子中我们为Excel.Visible使用了set属性,从而使Excel应用程序可视。

我们将尝试在.NET环境中调用Excel应用程序。这是一个后期连接应用程序,因为如果是前期连接的话你就需要使用COM对象的RCW(RunTime Callable Wraper:运行时间的可调用包)来完成下面的命令行程序tblimp所完成的任务:

ex. c:\> tblimp /out:

下载COMinDOTNET.zip,这是一个控制台应用程序。下面是调用excel的代码:

//Variable
Type excel;
object[] parameter= new object[1];
object excelObject;
try
{
//Get the excel object
excel = Type.GetTypeFromProgID("Excel.Application");
//Create instance of excel
excelObject = Activator.CreateInstance(excel);
//Set the parameter whic u want to set
parameter[0] = true;
//Set the Visible property
excel.InvokeMember("Visible", BindingFlags.SetProperty, null, excelObject, parameter);
}
catch(Exception e)
{
Console.WriteLine("Error Stack {0} ", e.Message) ;
}
finally
{
//When this object is destroyed the Excel application will be closed
//So Sleep for sometime and see the excel application
Thread.Sleep(5000);
//Relaese the object
//GC.RunFinalizers()
}

创建多线程应用程序

在.NET和C#中编写一个多线程应用程序将非常得容易。即使对于那些从没有用C#编写过多线程应用程序的初学者,只需遵循以下这些简单的步骤就可以实现目的。

定义名称空间

在.NET中,多线程功能是在System.Threading名称空间中定义的。因此,在使用任何线程类之前,必须定义 System.Threading名称空间。定义方法如下:

using System.Threading;

启动线程

System.threading名称空间中的Thread类代表一个线程对象,用这个类对象可以创建新的线程,删除、暂停和恢复线程。 下面的代码使用Thread类创建一个新的线程,然后启动这个线程:

thread = new Thread(new ThreadStart( WriteData ));

thread.Start();

其中WriteData是这个线程要执行的一个函数,代码如下:

protected void WriteData()

{

string str ;

for ( int i = 0; i<=10000; i++ )

{

str = "Secondary Thread" + i.ToString();

Console.WriteLine(listView1.ListItems.Count, str, 0, new string[]{""} );

Update();

}

}

杀死线程

Thread类的Abort方法用于永久地杀死一个线程。但是请注意,在调用Abort方法前一定要判断线程是否还激活,也就是判断thread.IsAlive的值:

if ( thread.IsAlive )

{

thread.Abort();

}

暂停线程

Thread.Sleep方法用于将一个线程暂停一段时间,代码如下:

thread.Sleep();

设置线程的优先权

我们可以使用Thread类的ThreadPriority属性设置线程的优先权。线程优先权的取值范围是Normal、AboveNormal、BelowNormal、Highest或者Lowest。请看下面的设置代码:

thread.Priority = ThreadPriority.Highest;

延迟线程

Thread类的Suspend方法可以延迟一个线程。线程被延迟到调用Resume方法为止。

if (thread.ThreadState = ThreadState.Running )

{

thread.Suspend();

}

恢复被延迟的线程

调用Resume方法可以恢复一个被延迟的线程。如果线程没有被延迟,Resume方法就是无效的。

if (thread.ThreadState = ThreadState.Suspended )

{

thread.Resume();

}

时间: 2024-11-02 10:10:56

C# 积木模块 ABC(一)(转自新一代技术网)的相关文章

C# 积木模块 ABC(二)在C#中部署应用程序

程序 在C#中部署应用程序 在Visual Studio.NET中部署工程非常简单.大部分程序都可以通过一些方便的向导自动完成,而不需要费什么力气.但是要记住,根据请看,可能还需要在机器上安装Windows组件的更新Beta 1版.当然还需要Microsoft .NET框架.还要注意一点:Microsoft说当前的部署到了将来可能会无效. 一旦在Visual Studio中完成了应用程序的编写,就可以按照下述步骤开始部署: 首先,从文件菜单中选择增加新的工程文件: 然后,选择设置和部署工程,这时

C# 积木模块 ABC(三)

如何装载等待光标? 光标是Drawing名称空间的一部分.要显示一个特定的光标,可以查阅文档得到所有可用的类型.要显示等待光标,请试试以下代码: componentsName.Cursor = System.Drawing.Cursors.WaitCursor; // back to arrow Cursor = Cursors.Arrow 如何获取机器上正在运行的进程? 使用System.Diagnostics.Process类可以启动和停止系统进程.GetProcesses函数返回了机器上正

频频发力 5G,英特尔在下一代技术上都做了什么?

在过去的一年中,英特尔先后与 Verizon.爱立信.AT&T.华为展开密集的试验测试,在国内与中国联通.中国电信等运营商也通力合作,尝试探索商用场景.在人工智能和 5G 等下一代技术上,英特尔可谓投入重资,频频发力. 这一系列针对 5G 技术早期应用和商用体验的联合试验,一方面表明了在实现 5G 的过程中需要行业合作,另一方面也是为了在标准正式发布前,抢先了解 5G 以及毫米波的特性,为网络计划和部署提前做好准备,毕竟错过了 5G 就错过了下一个时代. 近日,雷锋网见到了英特尔通信与设备事业部

英特尔发下一代技术IvyBridge:进军智能手机

北京时间5月5日凌晨消息,英特尔周三发布了代号为"Ivy Bridge"的下一代技术,这种技术可在英特尔微处理器中加入更多晶体管,该公司希望藉此打入平板电脑和智能手机市场. 英特尔称,该公司预计可在2011年底以前开始生产使用这种新技术的第一批PC和服务器芯片,并表示该公司同时也将为手机生产新型处理器. 分析师指出,这种新技术可能会给英特尔的竞争对手ARM带来威胁,后者目前在手机市场上占据着主导地位.但分析师同时指出,英特尔是否能马上侵入ARM的领地还有待观察. 市场研究公司Matri

异步加载:ControlJS让脚本加载更快的一个模块

文章简介:关于ControlJs的使用和基础讲解. 关于ControlJs一共有三篇文章,这是第一部分.ControlJS是让脚本加载更快的一个模块(a javascript module for making scripts load faster). 三篇文章的结构分别为: 1. async loading2. delayed execution3.overriding document.write关于第一部分的异步加载,这个的关键在于尽快将页面作为html绘制出来,然后再用javascri

嵌入式系统中的模块动态加载技术

摘要 提出一种适用于嵌入式系统的模块动态加载技术,设计实现简单,占用资源少,开销小,并且成功运用于DeltaOS.可提高系统的灵活性和扩属性.介招加载与动态链接的原理和应用情况,解释相关术语,描述基本设计思路:详细说明该技术的核心.即模块声明.调用库.两级重定位表,最后给出结论. 关键词 模块 动态加栽 嵌入式系统DeltaOS 引 言随着电子技术的飞速发展,嵌人式设备应用越来越广泛,复杂度也越来越高.这使得硬件和软件设计比例发生了很大变化,软件开发的比重越来越大.然而传统嵌入式开发过程中需要将

用户研究之85后,突变的一代

中介交易 SEO诊断 淘宝客 云主机 技术大厅 最近,我接收了一名来实习的90后小朋友.为了测试一下水准,我给了她一个可大可小的任务:组织一群她的小伙伴儿,对国内各家以兜售生活方式为主题的"逼格电商"进行购物体验,交给我一份体验报告.我开了一张单子给她,上面是这一段时间以来我和我的朋友们.包括媒体公认的此类模式中的佼佼者. 收到她的作业那天,我打开制作的怪漂亮的PPT,一页页翻动,看到一半时,已经忍不住倒吸凉气.抓起电话对着一位著名风险投资人八卦:你肯定想不出来,你知道90后是怎么评价

《编写高质量代码:改善Objective-C程序的61个建议》——建议6:尽量使用模块方式与多类建立复合关系

建议6:尽量使用模块方式与多类建立复合关系 在2013年的苹果年度大会上,苹果在Objective-C的性能改进上大的变化之一就是加入了模块(Modules). 文件编译问题的存在性-编译时间过长 在了解模块(Modules)之前,需要先了解一下Objective-C的#impor机制.通过使用#import,用来引用其他的头文件. 熟悉C或者C++的人可能会知道,在C和C++里是没有#import的,只有#include(虽然GCC现在为C和C++做了特殊处理,使#imoprt可以被编译),用

2016年物联网下的Wi-Fi模块市场分析

日前,司南物联凭借物联网 Wi-Fi 系列模块获得"2016中国十大智能硬件方案奖",Wi-Fi 模块市场发展备受瞩目.随着智能家居大规模的发展需要,Wi-Fi 模块将成为今后无线互联领域的主角. 日常生活中,几乎无人不知 Wi-Fi ,因为这是智能终端设备重要的连网手段.标准的 Wi-Fi 模块约为一个硬币大小,这小小的模块一旦嵌入传统的硬件设备,就可以使设备利用 Wi-Fi 功能接入互联网,从而实现无线智能家居.智能医疗等物联网应用. 与直接把无线保真部分 Layout 嫁接到 P