ZKX's LAB

托管代码就是c#,c++,vb等在.net的clr里都能运行的代码么? vb.net什么是托管内存

2020-07-25知识11

vb.net 线程托管 窗口假死 因为代码的执行速度N快 你又用If Me.RichTextBox1.InvokeRequired Then所以 这边在执行 那边也执行 导致冲突(貌似是这样的意思 我也说不清楚)可以用委托去完成操作 保证不假死我刚好之前有个实验实例 你可以看看Imports System.ThreadingPublic Class Form1Delegate Sub dg(ByVal textt As String)Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.ClickDim t1 As New Thread(New ThreadStart(AddressOf ds1))t1.Start()Dim t2 As New Thread(New ThreadStart(AddressOf ds2))t2.Start()End SubSub ds1()For i As Integer=0 To 3000Me.BeginInvoke(New EventHandler(AddressOf ds11),i)Thread.Sleep(30)Application.DoEvents()NextEnd SubSub ds11(ByVal sender As System.Object,ByVal e As System.EventArgs)ListBox1.Items.Add(sender.ToString&Chr(6)&TextBox1.Text)End SubSub ds2()For i As Integer=0 To 3000Me.BeginInvoke(New EventHandler(AddressOf ds22),i)Thread.Sleep(30)Application.DoEvents()NextEnd SubSub ds22(ByVal sender As System.Object,ByVal e As System。.VB中的托管是什么意思? managed code就是例如 你开辟了一段空间,你不用写代码去回收空间,不用担心内存泄露,这些都被framework做了。实际上就是简化了你的编程,你可以把心思都放在算法和逻辑上面vb.net的托管 跨线程操作控件需要走Invoke()方法。C#可以用Invoke+MethodInvoker+Lambda表达式来简单完成。vb就不知道怎么写了托管代码与非托管代码的区别 1简单的说,就是代码被编译成MSIL后在.net的Framework下运行,同操作系统底层的交互都交给framework去做。所谓非托管代码就是脱离了Framework的管制,直接同底层API打交道,自己管理自己的内存和安全机制等东西。而托管代码就不管这些,全都由Framework去完成2“程序”一般都是在对操作系统进行直接或者间接的操作“托管程序”是需要通过访问公共语言运行时(cls)才能访问操作系统的程序而“非托管程序”不用通过访问公共语言运行时(cls)可以直接访问操作系统的程序3vb.net,C#等写的程序是托管程序,VC+可以写托管程序,如果用到了内存管理,则只能编译为非托管程序这些东西MSDN上都写得很清楚的,如果真想深入了解的话LZ可以看看CLR via C#、.net框架设计、Effective C#之类的书籍用vb.net怎么实现非托管dll文件的按钮的调用,怎么声明,程序写在程序什么位置,希望说清,不胜 (\"user32.dll\",SetLastError:=True)>;_Private Shared Function GetFocus()As IntPtr' 照着这个写吧,用VB6的声明也是能兼容的End Function像普通的函数一样放在类里,别忘了 Imports System.Runtime.InteropServicesvb.net 关闭窗口 内存不能释放 1.如果你释放的是托管托管代码的内存,那么托管代码的内存管理是自动的,.NET可以保证我们的托管程序在结束时全部释放。2.如果是非托管资源时.NET就不能自动管理了,下面是释放非托管资源内存方法当我们利用如数据库、文件等非托管资源时,就要用到.NET Framework中的标准:IDisposable接口。按照标准,所有有需要手动释放非托管资源的类都得实现此接口。这个接口只有一个方法,Dispose(),不过有相对的 Guidelines指示如何实现此接口,在这里我向大家说一说。实现IDisposable这个接口的类需要有这样的结构:[Visual Basic]Public Class BaseImplements IDisposablePublic Overloads Sub Dispose()Implements IDisposable.DisposeMe.Dispose(True)GC.SuppressFinalize(Me)End SubProtected Overloads Overridable Sub Dispose(ByVal disposing As Boolean)If disposing Then' 托管类End If' 非托管资源释放End SubProtected Overrides Sub Finalize()Me.Dispose(False)MyBase.Finalize()End SubEnd ClassPublic Class DeriveInherits BaseProtected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)If disposing Then' 托管类。什么是托管 托管是.NET的一个专门概念,它倡导一种新的编程理念,因此我们完全可以把“托管”视为“.NET”。由托管概念所引发的C++应用程序包括托管代码、托管数据和托管类三个组成部分:(1)托管代码:.Net环境提供了许多核心的运行(RUNTIME)服务,比如异常处理和安全策略。为了能使用这些服务,必须要给运行环境提供一些信息代码(元数据),这种代码就是托管代码。所有的C#、VB.NET、JScript.NET默认时都是托管的,但Visual C++默认时不是托管的,必须在编译器中使用命令行选项(/CLR)才能产生托管代码。(2)托管数据:与托管代码密切相关的是托管数据。托管数据是由公共语言运行的垃圾回收器进行分配和释放的数据。默认情况下,C#、Visual Basic 和 JScript.NET 数据是托管数据。不过,通过使用特殊的关键字,C# 数据可以被标记为非托管数据。Visual C++数据在默认情况下是非托管数据,即使在使用/CLR 开关时也不是托管的。(3)托管类:尽管Visual C++数据在默认情况下是非托管数据,但是在使用C++的托管扩展时,可以使用“_gc”关键字将类标记为托管类。就像该名称所显示的那样,它表示类实例的内存由垃圾回收器管理。另外,一个托管类也完全可以成为.NET 框架的成员,由此可以。

#托管代码#托管

随机阅读

qrcode
访问手机版