重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
干什么要锁定?程序员不写加载图片的代码,用户没办法自己加载图片的,你只要加载了图片后不去管他就是了么
成都创新互联公司长期为超过千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为定西企业提供专业的成都网站设计、成都网站制作,定西网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。
不明白为什么不管他不能解决问题。你是不是写了加载图片功能,但希望用户只能用一次加载后不能再加载?那只要加个变量记录一下就可以。或者直接判断picturebox的图片属性是否不为空也可以
使用 Explicitily(拼写不一定正确),就可以正常使用close方法关闭窗体。只是窗体关闭后,仍然驻留内存中,但是不影响程序的再次启动。如果是反复调试程序,则必须在UG中手动卸载(文件-实用工具-卸载共享图像,这个“图像”应该是翻译错误,实际上就是程序在内存中的实例)。
多线程一般是不推荐用的,因为线程之间如果有共享资源的话会引起竞争,需要加锁处理;而且线程间没有时序关系,所以你在调试中可能会出现异步处理结束顺序与开始处理顺序不一致的情况(我在调试中已经发现该问题)。
针对你提出的这个问题,采用了多线程处理,利用的是BackgroundWorker也就是异步处理控件进行了处理。
代码已经经过调试通过。欢迎交流,如有问题,留下QQ或其他联系方式。
代码如下,并附程序截图。
‘---------------------------------------------------
Imports System.ComponentModel '导入异步控件命名空间
Public Class Form1
Private howmany As Integer = 10
Private AnalysisNumber(0 To howmany - 1) As BackgroundWorker
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ListBox1.Items.Clear()
creatNewBackgroundWorker()
addHandle()
startWork()
End Sub
Private Sub creatNewBackgroundWorker()
For i As Integer = 0 To AnalysisNumber.Length - 1
AnalysisNumber(i) = New BackgroundWorker
Next
End Sub
Private Sub addHandle()
For i As Integer = 0 To AnalysisNumber.Length - 1
AddHandler AnalysisNumber(i).DoWork, AddressOf AnalysisNumber_DoWork
AddHandler AnalysisNumber(i).RunWorkerCompleted, AddressOf AnalysisNumber_RunWorkerCompleted
Next
End Sub
Private Sub startWork()
For i As Integer = 0 To 9
Dim temp(0 To 9) As Integer
For j As Integer = 1 To 10
temp(j - 1) = 10 * i + j
Next
AnalysisNumber(i).RunWorkerAsync(temp)
Next
End Sub
Private Sub AnalysisNumber_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Dim data As Integer()
data = CType(e.Argument, Integer())
Dim temp As Integer
For i As Integer = 0 To data.Length - 1
temp = data(i)
data(i) = temp * temp
Next
e.Result = data
End Sub
Private Sub AnalysisNumber_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
Dim data As Integer()
data = CType(e.Result, Integer())
For i As Integer = 0 To data.Length - 1
ListBox1.Items.Add(data(i))
Next
End Sub
End Class
vb6或者vb.net调用C++的Dll动态链接库,都需要进行二次封装,这是没办法的,打开.H包含文件,所需要的结构体和函数都需要定义,类似于vb调用API函数,下面举个例子:
System.Runtime.InteropServices.DllImport ( "Shell32.dll" ) _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function
'声明ExtractIcon函数
这样在程序中可以调用它了:
Dim hIcon As System.IntPtr = ExtractIcon ( IntPtr.Zero , sfName , 0 )
如何处理锁死?同步的程序就有这个缺陷,条件得不到满足就不会返回。所以想不锁死就只能满足
a.StandardOutput.ReadLine的需求。
如果确实满足不了或者无法预料能否满足怎么办?
将这个方法放入一个线程,这样线程锁死,主程序界面也不会锁死,还是会响应用户操作,而且主线程可以设定一个等待时间,如果超时就杀死线程。
打开的资源你没有关闭,可能你缺少调用类似FileStream.Close() 的方法.