PDA

View Full Version : دوتا مشکل عجیب و غریب در استفاده از ترد برای دیتا گرید ویو و دکمه



Omid.R.A.Candy
چهارشنبه 10 مهر 1392, 21:34 عصر
سلام

دوتا مشکل عجیب و غریب در استفاده از ترد پیدا کردم یکی در مورد پر کردن دیتاگرید ویو و دیگری در رابطه با تغییر خصوصیات یک دکمه.البته از کد زیر هم استفاده کردم ولی جواب نداده!




CheckForIllegalCrossThreadCalls = False

البته از متدهای میوتکس و مانیتور اینها هم استفاده کردم ولی جواب نگرفتم!

برای گرید ویو:

111412


برای دکمه:
111413http://barnamenevis.org/images/misc/pencil.png

محسن شامحمدی
پنج شنبه 11 مهر 1392, 09:24 صبح
کدی که استفاده کردید؟

Omid.R.A.Candy
پنج شنبه 11 مهر 1392, 11:18 صبح
کدی که استفاده کردید؟


سلام

نمونه برنامه اینه- حجمش 3mb هست و از 11 بخش تشکیل یافته:

قسمت 1:

111431

111433

111434

111435

111436

Omid.R.A.Candy
پنج شنبه 11 مهر 1392, 11:23 صبح
قسمت 2 :

111437

111438

111439

111440

111441

111442

Omid.R.A.Candy
جمعه 12 مهر 1392, 13:49 عصر
سلام دوباره این هم کدهای مورد استفادم:




Imports System.Data.OleDb




Public Class Form1


Dim Number_of_Rows_on_DataBase As Integer



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

DataGridView1.DataSource = Load_DataBase_For_Access_Type_1(Application.Startu pPath & "\Deutsch-Englisch.accdb", "Table1")
Number_of_Rows_on_DataBase = Load_DataBase_For_Access_Type_1(Application.Startu pPath & "\Deutsch-Englisch.accdb", "Table1").Rows.Count

End Sub

'................................................. ...............

Public Sub Work1()


'but we can use Try and Cash to Slove this Problem.But as you know this is not the best way!.
RadButton1.Enabled = True

End Sub

Private Sub RadButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadButton1.Click
'--------------------------------------------------

RadButton1.Enabled = False


'-------------------------------------------------------------
Dim T1 As System.Threading.Thread
CheckForIllegalCrossThreadCalls = False

T1 = New System.Threading.Thread(AddressOf Work1)
T1.IsBackground = True
T1.Start()
'-------------------------------------------------------------
End Sub

'................................................. ...............

Public Function cnnString_DataSource_For_Access(ByVal Data_Source_Adress_For_Access As String) As String

cnnString_DataSource_For_Access = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Data_Source_Adress_For_Access

End Function

Public Function Load_DataBase_For_Access_Type_1(ByVal Data_Source_Adress_For_Access As String, ByVal Table_Name_For_Access As String) As DataTable

Dim Adapter_For_Access As OleDbDataAdapter
Dim DataTable_For_Access As New DataTable

Adapter_For_Access = New OleDb.OleDbDataAdapter("select * from " & Table_Name_For_Access, cnnString_DataSource_For_Access(Data_Source_Adress _For_Access))

Adapter_For_Access.Fill(DataTable_For_Access)
Load_DataBase_For_Access_Type_1 = DataTable_For_Access

End Function

Sub data_save_on_data_bace_Access(ByVal deutsch_word As String, ByVal englisch_word As String)


'-------------------------------------------
Dim cnn As New OleDb.OleDbConnection(cnnString_DataSource_For_Acc ess(Application.StartupPath & "\Deutsch-Englisch.accdb"))
'-------------------------------------------
Dim Access As String
Access = "insert into Table1 (ID,deutsch,englisch,wav) values (@ID,@deutsch,@englisch,@wav)"
'-------------------------------------------
Dim cmd As New OleDbCommand
'-------------------------------------------
cnn.Open()
'-------------------------------------------
cmd.Parameters.Clear()
cmd.CommandText = Access
cmd.Connection = cnn
cmd.Parameters.Clear()
'-------------------------------------------
cmd.Parameters.AddWithValue("ID", Number_of_Rows_on_DataBase + 1)
cmd.Parameters.AddWithValue("deutsch", deutsch_word)
cmd.Parameters.AddWithValue("englisch", englisch_word)
cmd.Parameters.AddWithValue("wav", 0)
'-------------------------------------------
cmd.ExecuteNonQuery()
cnn.Close()
'-------------------------------------------
Number_of_Rows_on_DataBase = Number_of_Rows_on_DataBase + 1


End Sub


Public Sub Work2()

For i = 1 To 100
data_save_on_data_bace_Access("Ich Bin", "OMID R.A.Candy")

'Problem is Here:DataGridview can't show data base loding!!!! whayyyyy?
DataGridView1.DataSource = Load_DataBase_For_Access_Type_1(Application.Startu pPath & "\Deutsch-Englisch.accdb", "Table1")
Next i

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


'-------------------------------------------------------------
Dim T2 As System.Threading.Thread
CheckForIllegalCrossThreadCalls = False

T2 = New System.Threading.Thread(AddressOf Work2)
T2.IsBackground = True
T2.Start()
'-------------------------------------------------------------






End Sub

'................................................. ...............









End Class