同Java一样简单!VB.NET多线程开发实例

同Java一样简单!VB.NET多线程开发实例,第1张

VB NET(Visual Basic NET)是为适应Microsoft NET框架的需要 对Visual Basic进行了重大改造后的开发工具 它比Visual Basic 功能更强大 更易于使用 其中最重要的变化就是对象继承 在VB NET中 所有可管理的类型都衍生自System Object 作为编程工具 最重要的一个特性就是垃圾碎片的回收 它由CLR(Common Language Runtime)进行控制 并提供更好的内存管理功能 通用的类型定义可以提供更好的互 *** 作性和协同工作能力 因此 VB NET显得更强大 更具可靠性 在VB NET中 大多数CLR内建的类型都在System名字空间里已经定义了 比如 System Object System Int 和 System String 要注意的是 一个名字空间可能嵌在另一个名字空间内 象System Data里就有System Data DataSet的类 代表是CLR编程模型很重要的一个新概念 代表是一个特殊类型的可管理的类 当你创建一个代表的实例时 你必须提供一个带有匹配签名的方法执行的地址 一旦创建了一个代表的实例 调用方法将变的很容易 过去 我们利用VB开发多线程的应用程序时 是一件很令人痛苦的事 经常是多线程的程序运行是会变成多错误的程序!但在VB NET中 这种状况已经大为改观 现在 我们利用VB NET处理多线程和利用JAVA处理多线程一样简单了 下面我们就举个例子 来看看VB NET的多线程吧!下面是多线程程序threadtest vb的代码 imports Systemimports System Threadingpublic class AClasspublic sub Method ()Dim i as integerFor i = to Console Writeline( 这是类AClass方法method 的内容 i)nextend subpublic sub Method ()Dim i as integerFor i = to Console Writeline( 这是类AClass方法method 的内容 i)nextend subend classpublic class ThreadTestpublic shared sub Main()dim obj as new aclassdim th th as threadth =new Thread(new ThreadStart(addressof thod ))th startth =new Thread(new ThreadStart(addressof thod ))th startdim i as integerFor i= to Console WriteLine( Main方法里的内容 i)Nextend subend class现在 来让我们剖析一下上面的例子 我们创建了我们自己的类AClass 并创建了两个方法 Method 和Method 这两个方法很简单 只有一个For循环 向输出设备输出一些信息 我们还定义了另外一个类ThreadTest来使用上面创建的类AClass 在Main()方法中 我们创建了类Thread的实例 类Thread可以在System Threading名字空间里得到 它定义了处理线程的属性和方法 在类Thread的构造器中 我们使用了类ThreadStart 类ThreadStart是一个代表 标志着当一个线程开始时就开始执行定义的方法 为了执行定义的方法 我们实际调用的是线程的Start()方法 用VBC来编译上面的程序 vbc /out:threadtest exe threadtest vb 运行编译后的程序 我们将会看到我们定义的两个方法和main()方法的混合输出 这就说明每一个方法都在自己的线程下运行 除了上面的方法 线程还有下面常用的方法 Stop():停止线程的运行 Suspend() 暂停线程的运行 Resume() 继续线程的运行 Sleep() 停止线程一段时间(单位为毫秒) lishixinzhi/Article/program/net/201311/11287

1、本质上没什么不同,主要是开发语言和运行环境的区别

2、如果你想问的是vb/delphi/c之类的软件能不能直接运行在安卓上,答案是不行,运行环境不同,所有的非安卓的软件(无论是windows还是mac什么),都不能直接在安卓或苹果手机上运行。

3、就连接方式来说,一般windows上的上位机通常是直接与下位机硬件通讯来接收数据(比如串口),安卓一般没办法直接与串口通讯(当然如果有定制的设备也是可以的),这种情况下,手机的App一般主要不是做数据采集,而是主要用来做数据展示和控制(比如说由普通的vb之类上位机软件采集数据存入数据库,手机上通过web接口来调用这些数据),当然,如果你下位机支持蓝牙之类的,手机上当然也可以做成手机上的上位机app来用。

RSA算法非常简单,概述如下:

找两素数p和q

取n=pq

取t=(p-1)(q-1)

取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1)

取de%t==1

这样最终得到三个数: n d e

设消息为数M (M <n)

设c=(Md)%n就得到了加密后的消息c

设m=(ce)%n则 m == M,从而完成对c的解密。

注:表示次方,上面两式中的d和e可以互换。

在对称加密中:

n d两个数构成公钥,可以告诉别人;

n e两个数构成私钥,e自己保留,不让任何人知道。

给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。

别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。

rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解

从而在已知n d的情况下无法获得e;同样在已知n e的情况下无法

求得d。

<二>实践

接下来我们来一个实践,看看实际的 *** 作:

找两个素数:

p=47

q=59

这样

n=pq=2773

t=(p-1)(q-1)=2668

取e=63,满足e<t并且e和t互素

用perl简单穷举可以获得满主 ed%t ==1的数d:

C:\Temp>perl -e "foreach $i (19999){ print($i),last if $i63%2668==1 }"

847

即d=847

最终我们获得关键的

n=2773

d=847

e=63

取消息M=244我们看看

加密:

c=Md%n = 244847%2773

用perl的大数计算来算一下:

C:\Temp>perl -Mbigint -e "print 244847%2773"

465

即用d对M加密后获得加密信息c=465

解密:

我们可以用e来对加密后的c进行解密,还原M:

m=ce%n=46563%2773 :

C:\Temp>perl -Mbigint -e "print 46563%2773"

244

即用e对c解密后获得m=244 , 该值和原始信息M相等。

<三>字符串加密

把上面的过程集成一下我们就能实现一个对字符串加密解密的示例了。

每次取字符串中的一个字符的ascii值作为M进行计算,其输出为加密后16进制

的数的字符串形式,按3字节表示,如01F

代码如下:

#!/usr/bin/perl -w

#RSA 计算过程学习程序编写的测试程序

#watercloud 2003-8-12

#

use strict;

use Math::BigInt;

my %RSA_CORE = (n=>2773,e=>63,d=>847); #p=47,q=59

my $N=new Math::BigInt($RSA_CORE{n});

my $E=new Math::BigInt($RSA_CORE{e});

my $D=new Math::BigInt($RSA_CORE{d});

print "N=$N D=$D E=$E\n";

sub RSA_ENCRYPT

{

my $r_mess = shift @_;

my ($c,$i,$M,$C,$cmess);

for($i=0;$i < length($$r_mess);$i++)

{

$c=ord(substr($$r_mess,$i,1));

$M=Math::BigInt->new($c);

$C=$M->copy(); $C->bmodpow($D,$N);

$c=sprintf "%03X",$C;

$cmess=$c;

}

return \$cmess;

}

sub RSA_DECRYPT

{

my $r_mess = shift @_;

my ($c,$i,$M,$C,$dmess);

for($i=0;$i < length($$r_mess);$i+=3)

{

$c=substr($$r_mess,$i,3);

$c=hex($c);

$M=Math::BigInt->new($c);

$C=$M->copy(); $C->bmodpow($E,$N);

$c=chr($C);

$dmess=$c;

}

return \$dmess;

}

my $mess="RSA 娃哈哈哈~~~";

$mess=$ARGV[0] if @ARGV >= 1;

print "原始串:",$mess,"\n";

my $r_cmess = RSA_ENCRYPT(\$mess);

print "加密串:",$$r_cmess,"\n";

my $r_dmess = RSA_DECRYPT($r_cmess);

print "解密串:",$$r_dmess,"\n";

#EOF

测试一下:

C:\Temp>perl rsa-testpl

N=2773 D=847 E=63

原始串:RSA 娃哈哈哈~~~

加密串:5CB6CD6BC58A7709470AA74A0AA74A0AA74A6C70A46C70A46C70A4

解密串:RSA 娃哈哈哈~~~

C:\Temp>perl rsa-testpl 安全焦点(xfocus)

N=2773 D=847 E=63

原始串:安全焦点(xfocus)

加密串:3393EC12F0A466E0AA9510D025D7BA0712DC3379F47D51C325D67B

解密串:安全焦点(xfocus)

在VBNet当中,事件的"关联"是需要明显标志的,不像vb6当中,声明一个过程就是事件执行过程了

Handles用来静态"关联"一个或多个事件到一个过程

"关联"时,过程的签名必须与事件的签名相同(签名的意义请查看相关文档)

在VBNet当中,事件也是一个对象(VBNet当中一切皆为对象)

使用Handles时实际就相当于创建了一个对委托的实现(委托的意义请查看相关文档)

可以简单的认为,当事件被触发时,被Handles"关联"了的那些过程代码将被执行

而且,被"关联"的过程可以任意起名,不需要与事件和对象的名称相对应

上述代码如果去掉Handles 及其后面的内容,它将是一个最普通不过的过程,与其它过程没有两样,也不会有任何事件被触发时去执行这段代码,正因为加入了Handles 及其后面的一堆事件,它才会因事件被触发而被执行

说得再简单一点: 当PictureBox1DoubleClick, PictureBox4DoubleClick, PictureBox3DoubleClick,PictureBox2DoubleClick当中的任何一个事件被触发时,上述这个过程的代码都将被执行

再说说参数: sender表示触发了此事件的对象,在这里就是PictureBox1/PictureBox2/PictureBox3/PictureBox4当中的某一个,利用它能知道到底是哪个对象触发了此事件,e在这里没有用处,利用不到什么,之所以有它,是因为Object/EventArgs是Net事件的基本签名方式,它的好处在你以后对Net深入之后能体会到

这些参数的值都是通过被触发的事件传递过来的,可以简单的认为[事件调用了此过程并为参数赋了值]

以上就是关于同Java一样简单!VB.NET多线程开发实例全部的内容,包括:同Java一样简单!VB.NET多线程开发实例、电子印章系统的签名系统、如何用VB实现RSA加密算法,网上找到了一份代码,没有注释看不懂,请大神解释!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10213205.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存