PDA

View Full Version : thread



arsalansalar
شنبه 27 بهمن 1386, 19:49 عصر
با سلام
من برای تکمیل بانک یک دیکشتنری از یک وب سرویس استفاده می کنم به این صورت که لغت را ورودی می گیرد و خروجی ترجمه مورد نظر کلمه را می دهد. من می خواهم با یک threade به جای while این کار را بکنم.من در زیر کدم را آوردم می خواستم بدانم چگونه با therade آن را جایگزین کنم؟

Imports System.Data.OleDb
Imports System.Data
Public Class Form1
Dim con As OleDbConnection
Dim cmdSelect As OleDbCommand
Dim dr As OleDbDataReader
Function myInsert(ByVal r, ByVal num)
If r <> "The remote server returned an error: (999) Unable to process request at this time -- error 999." Then
Dim updateSql As String
updateSql = "Update bank Set france = '" & r & "' "
updateSql &= " Where val(id) = '" & num & "'"
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand(updateSql, con)
con.Open()
cmdSelect.ExecuteNonQuery()
con.Close()
Else
MessageBox.Show("France error")
End If


End Function

Function myInsert2(ByVal r, ByVal num)
If r <> "The remote server returned an error: (999) Unable to process request at this time -- error 999." Then
Dim updateSql As String
updateSql = "Update bank Set italy = '" & r & "' "
updateSql &= " Where val(id) = '" & num & "'"
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand(updateSql, con)
con.Open()
cmdSelect.ExecuteNonQuery()
con.Close()
Else
MessageBox.Show("italy error")
End If
End Function
Function myInsert3(ByVal r, ByVal num)
If r <> "The remote server returned an error: (999) Unable to process request at this time -- error 999." Then
Dim updateSql As String
updateSql = "Update bank Set spain = '" & r & "' "
updateSql &= " Where val(id) = '" & num & "'"
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand(updateSql, con)
con.Open()
cmdSelect.ExecuteNonQuery()
con.Close()
Else
MessageBox.Show("spain error")
End If
End Function
Function myInsert4(ByVal r, ByVal num)
If r <> "The remote server returned an error: (999) Unable to process request at this time -- error 999." Then
Dim updateSql As String
updateSql = "Update bank Set pourteghal = '" & r & "' "
updateSql &= " Where val(id) = '" & num & "'"
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand(updateSql, con)
con.Open()
cmdSelect.ExecuteNonQuery()
con.Close()
Else
MessageBox.Show("pourteghal error")
End If
End Function
Function myInsert5(ByVal r, ByVal num)
If r <> "The remote server returned an error: (999) Unable to process request at this time -- error 999." Then
Dim updateSql As String
updateSql = "Update bank Set russia = '" & r & "' "
updateSql &= " Where val(id) = '" & num & "'"
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand(updateSql, con)
con.Open()
cmdSelect.ExecuteNonQuery()
con.Close()
Else
MessageBox.Show("russia error")
End If
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Dim a As net.webservicex.www.Language
' Dim b As New net.webservicex.www.TranslateService
' MessageBox.Show(b.Translate(net.webservicex.www.La nguage.EnglishTOFrench, "door"))
'Dim a As net.webservicex.www.Language
Dim id As Double
Dim updateSql As String
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand("Select * From b", con)
con.Open()
dr = cmdSelect.ExecuteReader()
id = dr("id")
dr.Close()
con.Close()
'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''
Dim strWord, result As String
Dim i As Double
Dim b As New net.webservicex.www.TranslateService
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand("Select * From bank", con)
con.Open()
dr = cmdSelect.ExecuteReader()
While dr.Read
strWord = dr("english")
i = dr("id")
result = b.Translate(net.webservicex.www.Language.EnglishTO French, strWord)
Call myInsert(result, i)
result = b.Translate(net.webservicex.www.Language.EnglishTO Italian, strWord)
Call myInsert2(result, i)
result = b.Translate(net.webservicex.www.Language.EnglishTO Spanish, strWord)
Call myInsert3(result, i)
result = b.Translate(net.webservicex.www.Language.EnglishTO Portuguese, strWord)
Call myInsert4(result, i)
result = b.Translate(net.webservicex.www.Language.EnglishTo Russian, strWord)
Call myInsert5(result, i)

End While
dr.Close()
con.Close()
MessageBox.Show("لغات گرفته شد!")
'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''
updateSql = "Update b Set id = '" & i & "' "
updateSql &= " Where val(m) = '1'"
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand(updateSql, con)
con.Open()
cmdSelect.ExecuteNonQuery()
con.Close()
End Sub

raravaice
شنبه 27 بهمن 1386, 19:56 عصر
http://barnamenevis.org/forum/showthread.php?t=18540&highlight=thread

arsalansalar
یک شنبه 28 بهمن 1386, 15:07 عصر
آقا کسی نیست سورس یک multi thrade را بدهد.
در سایت فقط به مقاله و مثال های کوچک اکتفا شده.

arsalansalar
یک شنبه 28 بهمن 1386, 18:54 عصر
حداقل یکی بگه چگونه در یک treade یک فانکشن را فراخوانی می کنیم؟
من یکه چیزی نوشتم ولی درست کار نمیکنه و مشکل دارد.اگه بگید کجاست ممنون می شوم.

PrivateSub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' Dim myInsert As New clsCounter
' Dim Thread As New Threading.Thread(AddressOf myInsert.StartCounting)
Dim t AsNew Threading.Thread(AddressOf myInsert)
t.IsBackground = True
EndSub
Function myInsert(ByVal r, ByVal num)
If r <> "The remote server returned an error: (999) Unable to process request at this time -- error 999."Then
Dim updateSql AsString
updateSql = "Update bank Set france = '" & r & "' "
updateSql &= " Where val(id) = '" & num & "'"
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand(updateSql, con)
con.Open()
cmdSelect.ExecuteNonQuery()
con.Close()
Else
MessageBox.Show("France error")
EndIf
EndFunction

raravaice
یک شنبه 28 بهمن 1386, 19:23 عصر
http://barnamenevis.org/forum/showthread.php?t=66264

arsalansalar
یک شنبه 28 بهمن 1386, 21:40 عصر
من کد و به شکل زیر اصلاح کردم ولی از حرف t خطا می گیرد به نظر شما اشکال کار در چیست؟

PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t(از این خطا می گیره) AsNew Threading.Thread(AddressOf myInsert)
' t.IsBackground = True
t.Start(20)
EndSub
PrivateSub myInsert(ByVal r, ByVal num)
If r <> "The remote server returned an error: (999) Unable to process request at this time -- error 999."Then
Dim updateSql AsString
updateSql = "Update bank Set france = '" & r & "' "
updateSql &= " Where val(id) = '" & num & "'"
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand(updateSql, con)
con.Open()
cmdSelect.ExecuteNonQuery()
con.Close()
Else
MessageBox.Show("France error")
EndIf
EndSub

yavari
شنبه 04 اسفند 1386, 09:24 صبح
سلام


Dim t As Threading.Thread
t= New Threading.Thread(AddressOf myInsert)

موفق باشید

__H2__
شنبه 04 اسفند 1386, 09:56 صبح
سلام
همون خطی هم که خودتون نوشته اید صحیح است و نباید خطا بگیرد.
مشکل از myInsert است این متد فقط باید یک Object بگیرد یا کلاً چیزی نگیرد.
شما دو مقدار r و num میگیرد که حتی نوعش را هم مشخص نکرده اید !!!!!!!!!

arsalansalar
شنبه 18 اسفند 1386, 07:36 صبح
سلام
همون خطی هم که خودتون نوشته اید صحیح است و نباید خطا بگیرد.
مشکل از myInsert است این متد فقط باید یک Object بگیرد یا کلاً چیزی نگیرد.
شما دو مقدار r و num میگیرد که حتی نوعش را هم مشخص نکرده اید !!!!!!!!!
دوست عزیز می شود کمی بیشتر توضیح دهید و در صورت امکان نحوه صحیح آن را بگویید.
با تشکر

arsalansalar
یک شنبه 19 اسفند 1386, 10:16 صبح
سلام
همون خطی هم که خودتون نوشته اید صحیح است و نباید خطا بگیرد.
مشکل از myInsert است این متد فقط باید یک Object بگیرد یا کلاً چیزی نگیرد.
شما دو مقدار r و num میگیرد که حتی نوعش را هم مشخص نکرده اید !!!!!!!!!
کسی نیست معنی حرف این دوستمونو به زبون ساده تر بگه؟:عصبانی++:

yavari
یک شنبه 19 اسفند 1386, 12:31 عصر
سلام

متد شما 2 ورودی میگیره


myInsert(ByVal r, ByVal num)

که باید برای ترید مشخص باشند
میتونید یه دلگیت تعریف کنید و پارامترا رو پاس بدید


Public Delegate Sub ThreadStartDELEGATE(ByVal rAs Integer,ByVal num As Integer)
و بعد اینجوری فراخوانی کنید


Dim Thread As New ThreadStartDELEGATE(AddressOf myInsert)
Thread.Invoke(r, num)

موفق باشید

arsalansalar
یک شنبه 19 اسفند 1386, 12:50 عصر
دوست عزیز با تشکر از راهنمایی شما من کدم را به شکل زیر در آوردم ولی از myinsert که با رنگ قرمز مشخص کردم خطا می گیرد.

Public Delegate Sub ThreadStartDELEGATE(ByVal r As Integer, ByVal num As Integer)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Thread As New ThreadStartDELEGATE(AddressOf myInsert)
Thread.Invoke(r, num)
Dim strWord, result As String
Dim i As Double
Dim b As New net.webservicex.www.TranslateService
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand("Select * From bank", con)
con.Open()
dr = cmdSelect.ExecuteReader()
While dr.Read
strWord = dr("english")
i = dr("id")
result = b.Translate(net.webservicex.www.Language.EnglishTO French, strWord)
End While
dr.Close()
con.Close()
MessageBox.Show("لغات گرفته شد!")
End Sub
Private Sub myInsert()
If r <> "The remote server returned an error: (999) Unable to process request at this time -- error 999." Then
Dim updateSql As String
updateSql = "Update bank Set france = '" & r & "' "
updateSql &= " Where val(id) = '" & num & "'"
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand(updateSql, con)
con.Open()
cmdSelect.ExecuteNonQuery()
con.Close()
Else
MessageBox.Show("France error")
End If
End Sub

yavari
دوشنبه 20 اسفند 1386, 10:26 صبح
سلام

دوست عزیز ، من رو این حساب که متد شما پارامتر داشت این راهکارو ارائه کردم

PrivateSub myInsert(ByVal r, ByVal num)

شما چرا باز ورش داشتی ؟!؟!... :ناراحت:

Private Sub myInsert()

arsalansalar
سه شنبه 21 اسفند 1386, 10:55 صبح
اینم کد برنامه من

yavari
سه شنبه 21 اسفند 1386, 21:44 عصر
اینم کد برنامه من

سلام

مشکل ترید با دادن پارامتر حل میشه !


Imports System.Data.OleDb
Imports System.Data
Public Class Form1
Dim con As OleDbConnection
Dim cmdSelect As OleDbCommand
Dim dr As OleDbDataReader
Dim r, num As String
Public Delegate Sub ThreadStartDELEGATE(ByVal r As Integer, ByVal num As Integer)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Thread As New ThreadStartDELEGATE(AddressOf myInsert)
Thread.Invoke(r, num)
Dim strWord, result As String
Dim i As Double
Dim b As New net.webservicex.www.TranslateService
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand("Select * From bank", con)
con.Open()
dr = cmdSelect.ExecuteReader()
While dr.Read
strWord = dr("english")
i = dr("id")
result = b.Translate(net.webservicex.www.Language.EnglishTO French, strWord)
End While
dr.Close()
con.Close()
MessageBox.Show("لغات گرفته شد!")

End Sub
Private Sub myInsert(ByVal r As Integer, ByVal num As Integer)
If r <> "The remote server returned an error: (999) Unable to process request at this time -- error 999." Then
Dim updateSql As String
updateSql = "Update bank Set france = '" & r & "' "
updateSql &= " Where val(id) = '" & num & "'"
con = New OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\word.mdb")
cmdSelect = New OleDbCommand(updateSql, con)
con.Open()
cmdSelect.ExecuteNonQuery()
con.Close()
Else
MessageBox.Show("France error")
End If
End Sub
End Class


امیدوارم مشکلتون با ترید حل شده باشه :لبخندساده:
موفق باشید

arsalansalar
چهارشنبه 22 اسفند 1386, 07:57 صبح
دوست عزیز با تشکر از راهنمایی شما ولی از این خط اشکال می گیرد

If r <> "The remote server returned an error: (999) Unable to process request at this time -- error 999."

نوع خطایی که می گیرد این است:

convertimg from string to double is invalid

raravaice
چهارشنبه 22 اسفند 1386, 11:03 صبح
دوست عزیز با تشکر از راهنمایی شما ولی از این خط اشکال می گیرد

سلام

متغیر R از نوع integer هست که شما داری با یه مقدار string مقایسش میکنی.!!

موفق باسید

__H2__
شنبه 25 اسفند 1386, 13:15 عصر
سلام
من بار اول اصلاً کد شما را نخواندم و فقط نگاهی سریع کردم و ایراد را دیدم ولی حالا کد شما دانلود کردم و دیدم،
با عرض شرمندگی، کد بسیار آشفته و نامرتبط است و اصلاً هم ارتباطی به چند ریسمانی ندارد.
کلاً چه کار میخواهید انجام دهید؟؟؟؟؟؟
یک شرحی دهید که دارید چه کار میکنید ؟؟؟؟؟
فیلد id در بانک اصلی از چه نوعی است؟؟؟ بالاخره String است یا Double یا Integer ؟؟؟؟؟؟
متد Translate قرار است چه کار کند؟؟؟؟؟

arsalansalar
شنبه 25 اسفند 1386, 17:42 عصر
با سلام
دوست عزیز من می خواهم از یک web service لغت دانلود کنم و برای این کار بانک لغت انگلیسم را می دهم و معادل فرانسوی اسپانییایی و ... دریافت می کنم و برای اینکه cpu usage من بالا نرود می خواهم از رسمان استفاده کنم.

__H2__
دوشنبه 27 اسفند 1386, 15:06 عصر
سلام
چیزی که من از کد شما متوجه شدم آن است که شما یک دیتابیس اکسس دارید که شامل لغات انگلیسی از قبل تعریف شده و موجود است و حالا میخواهید معادل فرانسوی آن را با برنامه و از طریق وب سرویس پر کنید.

اگر چنین باشد، به عنوان یک مدل فوق ساده و برای یادگیری کد زیر را توصیه میکنم.

- دیتا بیس نمونه را قرار دادم برای صحت کارکرد برنامه فیلد [English] باید PrimaryKey باشد یا حداقل غیر تکراری و غیر NULL باشد و گرنه برنامه با مشکل مواجه میشود.

- اگر از نسخه VB2008 استفاده کردید به جای یک IIf که من نوشتم از If استفاده کنید
اصلاً هیچ وقت از IIf استفاده نکردم و نمیکنم ولی نسخه 2008 دستور جدیدی با نام If که خیلی کاملتر است دارد و همان کار IIf قدیم را انجام میدهد (و کمی بیشتر) .
الآن هم به نیت If جدید از آن استفاده کردم ولی یادم آمد که نسخه 2005 را دارید، پس تغییرش دادم به IIf
یعنی کد آن خط چنین میشود (در 2008)


If(String.IsNullOrEmpty(strFrench), System.DBNull.Value, strFrench)

البته اگر مطمئن بودم از نسخه 2008 استفاده میکردید، شاید چند خط دیگر را هم طور دیگری مینوشتم.
چون از نسخه 2005 استفاده میکنید، نمیتواند فایل proj یا sln را باز کنید ولی میتوانید فایل frmMain.vb و frmMain.Designer.vb را دستی به پروژه قبلی خود اضافه کنید.

- کد جاری فقط برای نمونه است، تا فرآیند و روش کلی را درک کنید و خودتان کد مورد نیازتان را بسته به خواسته هایتان بنویسید.
مثلاً مکانیزم Cancel اصلاً مورد تأیید من نیست ولی در عوض ساده و قابل فهم است.

- مطلب آخر آنکه ده روزی آنلاین نخواهم بود، پس اگر سوالی بپرسید، شرمنده تان میشوم.


چون احتمالاً این آخرین پستم در سال 86 در این سایت است، عید را پیشاپیش به تمام دوستان و اعضای سایت تبریک میگم.
انشا ا.... سال خوبی داشته باشد و جوان تر ها هم انشا ا... دست و پا و چشمشان را در چهارشنبه آخر سال جا نگذارند!
جمیعاً موفق باشید.