欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

vb.net多線程傳參數(shù),c多線程傳遞參數(shù)

vb.net 如何傳遞類參數(shù)

線程結(jié)束后利用委托生成事件返回,線程應(yīng)用包括傳入和傳出參數(shù)。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供東安網(wǎng)站建設(shè)、東安做網(wǎng)站、東安網(wǎng)站設(shè)計(jì)、東安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、東安企業(yè)網(wǎng)站模板建站服務(wù),10多年東安做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

Public Delegate Sub ThreadCallback(value As ThreadResult)

Public Class Form1

Private WithEvents _th_1 As Thread_1

Protected Overrides Sub OnLoad(e As System.EventArgs)

Dim value As ThreadObject

value.Index = 1

Me._th_1 = New Thread_1(Me)

Me._th_1.Run(value)

MyBase.OnLoad(e)

End Sub

Private Sub Thread_1_End(sender As Object, e As ThreadEventArgs) Handles _th_1.ThreadEnd

Me.TextBox1.Text = e.Result.Text

End Sub

End Class

Public Class Thread_1

Public Event ThreadEnd(sender As Object, e As ThreadEventArgs)

Private _control As Control

Sub New(control As Control)

Me._control = control

End Sub

Public Sub Run(value As Object)

Dim th As New Threading.Thread(AddressOf ThreadProc)

th.Start(value)

End Sub

Private Sub ThreadProc(obj As Object)

Dim value As ThreadObject = CType(obj, ThreadObject)

Dim result As ThreadResult = Nothing

If value.Index = 1 Then result.Text = "測(cè)試"

Dim callback As New ThreadCallback(AddressOf ThreadInvoke)

_control.Invoke(callback, result)

End Sub

Private Sub ThreadInvoke(value As ThreadResult)

RaiseEvent ThreadEnd(Me, New ThreadEventArgs(value))

End Sub

End Class

Public Structure ThreadObject

Public Index As Integer

'Public Rect As Rectangle

End Structure

Public Structure ThreadResult

Public Text As String

'Public Rect As Rectangle

End Structure

Public Class ThreadEventArgs

Inherits System.EventArgs

Private _result As ThreadResult

Public ReadOnly Property Result As ThreadResult

Get

Return _result

End Get

End Property

Sub New(value As ThreadResult)

Me._result = value

End Sub

End Class

vb.net 多線程獲取網(wǎng)頁(yè)內(nèi)容

public static string getXmlFile(String url, String paramList,string referer)

{

HttpWebResponse res = null;

string strResult = " ";

try

{

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

req.Method = "GET ";

req.KeepAlive = true;

req.Referer=referer;

//CookieContainer cookieCon = new CookieContainer();

//req.CookieContainer = cookieCon;

//req.CookieContainer.SetCookies(new Uri(url),cookieheader);

StringBuilder UrlEncoded = new StringBuilder();

res = (HttpWebResponse)req.GetResponse();

Stream ReceiveStream = res.GetResponseStream();

Encoding encode = System.Text.Encoding.GetEncoding( "gb2312 ");

StreamReader sr = new StreamReader( ReceiveStream, encode );

Char[] read = new Char[256];

int count = sr.Read( read, 0, 256 );

while (count 0)

{

String str = new String(read, 0, count);

strResult += str;

count = sr.Read(read, 0, 256);

}

}

catch(Exception e)

{

strResult = e.ToString();

}

finally

{

if ( res != null )

{

res.Close();

}

}

return strResult;

}

多線程里調(diào)用就行了 費(fèi)了好長(zhǎng)時(shí)間才弄出來(lái) 我調(diào)試過(guò)了 能行 如果對(duì)你有用就給分吧

什么是多線程技術(shù)?在VB 中如何使用?

vb6可以實(shí)現(xiàn)多線程,不過(guò)比較麻煩,vb.net完全支持多線程,請(qǐng)參見(jiàn)msdn.

至于vb6實(shí)現(xiàn)多線程請(qǐng)看CreateThread這個(gè)API函數(shù).以下有詳細(xì)方案:

用VB寫(xiě)多線程程序用到的第一個(gè)API函數(shù)是CreateThread,這個(gè)函數(shù)的聲明如下:

Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long)As Long

這個(gè)函數(shù)的返回值是線程的句柄,它的參數(shù)含義如下:

1.lpThreadAttributes:這個(gè)參數(shù)表明函數(shù)的返回句柄是否可被子進(jìn)程繼承,如果可被繼承,則指向一個(gè)SECURITY_ATTRIBUTES的結(jié)構(gòu),否則設(shè)為vbnull。

2.dwStackSize:這個(gè)參數(shù)設(shè)置線程的堆棧大小。

3.lpStartAddress:這個(gè)參數(shù)指明這個(gè)線程函數(shù)的起始地址。

4.lpParameter:這個(gè)參數(shù)是傳給線程函數(shù)的參數(shù)。

5.dwCreationFlags:這個(gè)參數(shù)設(shè)置當(dāng)線程創(chuàng)建時(shí)的初始狀態(tài),掛起,運(yùn)行等等。

6.lpThreadId:這個(gè)參數(shù)是待創(chuàng)建線程的ID號(hào)。

假設(shè)創(chuàng)建一個(gè)管理線程的類clsThreads,用類的一個(gè)公用函數(shù)Initialize來(lái)初始化線程,用ResumeThread和SuspendThread函數(shù)來(lái)激活線程,實(shí)現(xiàn)代碼如下:

Private Type udtThread

Handle As Long

Enabled As Boolean

End Type

Private uThread As udtThread

Private Const CREATE_SUSPENDED As Long = H4

Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long

Private Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long

Private Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long

Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long

Public Sub Initialize(ByVal lpfnBasFunc As Long) '初始化線程

Dim lStackSize As Long, lCreationFlags As Long, lpThreadId As Long, lNull As Long

On Error Resume Next

lNull = 0 '創(chuàng)建一個(gè)空指針

lStackSize = 0 '0表示用exe的stack size

lCreationFlags = CREATE_SUSPENDED '表示初始化后先不激活,讓別人來(lái)激活

uThread.Handle = CreateThread(lNull, lStackSize, lpfnBasFunc, lNull, lCreationFlags, lpThreadId)

If uThread.Handle = lNull Then MsgBox "Create thread failed!"

End Sub

Public Property Get Enabled() As Boolean

On Error Resume Next

Enabled = uThread.Enabled

End Property

Public Property Let Enabled(ByVal vNewValue As Boolean)

On Error Resume Next

If vNewValue And (Not uThread.Enabled) Then

ResumeThread uThread.Handle '激活線程

uThread.Enabled = True

ElseIf uThread.Enabled Then

SuspendThread uThread.Handle

uThread.Enabled = False

End If

End Property

Private Sub Class_Terminate() '終止線程

On Error Resume Next

Call TerminateThread(uThread.Handle, 0)

End Sub

以上內(nèi)容在類模塊clsThreads中,有了它就可以在窗體中實(shí)現(xiàn)多線程了。下面以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明如何創(chuàng)建多線程(以2個(gè)線程為例)。

在form1中添加picture1和picture2兩個(gè)圖片框,以及一個(gè)command1按鈕,在工程中添加一個(gè)bas模塊,該模塊的代碼如下:

Option Explicit

Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub FlickerTop()

Static BgColor As Long

Dim lTick As Long, lCounter As Long

On Error Resume Next

For lCounter = 0 To 60000

BgColor = lCounter Mod 256

Form1.Picture1.BackColor = RGB(BgColor, 0, 0) '變化圖片框的顏色

lTick = GetTickCount

While GetTickCount - lTick 10 '延遲10個(gè)毫秒時(shí)間

Wend

Next

End Sub

Public Sub FlickerBottom()

Static BgColor As Long

Dim lTick As Long, lCounter As Long

On Error Resume Next

For lCounter = 0 To 60000

BgColor = lCounter Mod 256

Form1.Picture2.BackColor = RGB(0, BgColor, 0)

lTick = GetTickCount

While GetTickCount - lTick 10

Wend

Next

End Sub

最后在form1中用下面的代碼來(lái)創(chuàng)建兩個(gè)線程,

Option Explicit

Public myThreadTop As New clsThreads, myThreadBottom As New clsThreads

Private Sub Command1_Click()

On Error Resume Next

With myThreadTop

.Initialize AddressOf FlickerTop

.Enabled = True

End With

With myThreadBottom

.Initialize AddressOf FlickerBottom

.Enabled = True

End With

MsgBox "看看會(huì)有什么..."

Set myThreadTop = Nothing

Set myThreadBottom = Nothing

End Sub

VB.NET 簡(jiǎn)單多線程

多線程一般是不推薦用的,因?yàn)榫€程之間如果有共享資源的話會(huì)引起競(jìng)爭(zhēng),需要加鎖處理;而且線程間沒(méi)有時(shí)序關(guān)系,所以你在調(diào)試中可能會(huì)出現(xiàn)異步處理結(jié)束順序與開(kāi)始處理順序不一致的情況(我在調(diào)試中已經(jīng)發(fā)現(xiàn)該問(wèn)題)。

針對(duì)你提出的這個(gè)問(wèn)題,采用了多線程處理,利用的是BackgroundWorker也就是異步處理控件進(jìn)行了處理。

代碼已經(jīng)經(jīng)過(guò)調(diào)試通過(guò)。歡迎交流,如有問(wèn)題,留下QQ或其他聯(lián)系方式。

代碼如下,并附程序截圖。

‘---------------------------------------------------

Imports?System.ComponentModel?'導(dǎo)入異步控件命名空間

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

vb.net 怎樣操作帶參數(shù)的多線程

public class threadclass

{

public int a;

public void threadmethod()

{

//use a;

}

}

...

threadclass tc = new ....

tc.a = 10;

Thread t = new ThreadStart(tc.threadmethod);

t.Start

Vb.net 怎樣操作有參數(shù)的多線程而且還是循環(huán)的。

Sub?Main()

Dim?thr?As?New?Thread(AddressOf?循環(huán))

thr.Start("a")

End?Sub

Sub?循環(huán)(a()?As?String)

'這里隨你干什么循環(huán)也行

For?Each?i?As?String?In?a

MsgBox(i)

Next

End?Sub

看懂了吧 參數(shù)只能有一個(gè) 也可以不是數(shù)組,在a() As String的a后面去掉括號(hào)就行

新聞標(biāo)題:vb.net多線程傳參數(shù),c多線程傳遞參數(shù)
當(dāng)前URL:http://chinadenli.net/article10/dsgjego.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT網(wǎng)站設(shè)計(jì)公司定制開(kāi)發(fā)建站公司品牌網(wǎng)站制作搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名