رفتن به مطلب
  • 0

مشکل در استفاده از ترد Thread


ha88an

سوال

سلام دوستای من یه مشکل کوچیک داشتم توی استفاده از ترد

ابتدا دو تا ترد خودمو توی اکتیویتی Create اینشیالایز کردم:

Sub Activity_Create(firsttime As Boolean)
	Activity.LoadLayout("1")

Tread1.Initialise("Tread1")
Tread2.Initialise("Tread2")

End Sub

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

Sub btnnext_Click
 Tread1.Start(Null,"f1", Null)
 Tread2.Start(Null,"f2", Null)
End Sub

این هم از ساب f1 و f2 من

Sub f1
	Panel2.Visible=True
	an1.InitializeScaleCenter("an1",0,0,Activity.Width,Activity.Height,Panel2)
	an1.Duration = 8000
	an1.Start(Panel2)
End Sub

Sub f2
Dim newPos As Int
cur1 = Main.sql1.ExecQuery("SELECT * FROM tbl")
For i = 0 To cur1.RowCount - 1
	cur1.Position = i
	If cur1.GetInt("id") = Main.xselect Then
		newPos = i
	End If
Next
Try
	cur1.Position = newPos + 1
Main.xselect = cur1.GetString("id")
Catch
	cur1.Position=0
	Main.xselect = cur1.GetString("id")
End Try
Activity.Finish
End Sub

این همه اروری که بهم توی log میده

music_f1 (B4A line: 137)
Panel2.Visible=True
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
	at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6101)
	at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:864)
	at android.view.ViewGroup.invalidateChild(ViewGroup.java:4320)
	at android.view.View.invalidate(View.java:10997)
	at android.view.View.setFlags(View.java:8953)
	at android.view.View.setVisibility(View.java:6098)
	at anywheresoftware.b4a.objects.ViewWrapper.setVisible(ViewWrapper.java:242)
	at ir.test.test._f1(music.java:1060)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:515)
	at anywheresoftware.b4a.agraham.threading.Threading$1.run(Threading.java:216)
	at java.lang.Thread.run(Thread.java:841)
لینک ارسال
به اشتراک گذاری در سایت های دیگر

2 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

شما میخواین تغییری ایجاد کنید در تردی که به ui وصل نیست .

 

این طوری ترد را استارت کنید احتمالا مشکلتون حل میشه

Thread2.RunOnGuiThread("Update", Params)
لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام حسن جان

همانطور که آرش گفت از Panel2.Visible=True اشکال گرفته ، یعنی از داخل Thred نمیتونی روی UI تغییراتی ایجاد کنی.

اما با تغییر این کد:

 Tread1.Start(Null,"f1", Null)

به این:

Tread1.RunOnGuiThread("f1",Null) 

مشکل حل میشه.

 

پ ن: عه آرش هم این کد رو داده بود. :DD:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...