اطلاعیه

کاربر گرامی

به انجمن برنامه نویسی AnswerCenter.ir خوش آمدید

 برای استفاده از تمامی امکانات سایت لطفا در انجمن عضو شوید


امین مهدی نژاد

قابلیتهای جدید B4A ورژن 7.X

6 ارسال در این موضوع قرار دارد

قابلیت Wait For:
 در این قابلیت ما می تونیم تمامی رویداد هارو در کنار کدی که می نویسیم داشته باشیم.یعنی دیگه نیازی نیست شما به صورت جداگانه برید رویداد مثلا JobDone  رو تعریف کنید.به وسیله WaitFor  هر جای ادیتور و در بلاک های مختلف می تونید رویداد هاتون رو صدا بزنید و کنترل کنید.

مزایای Wait For:

- نظم بهتر به کد نویسی

- جلوگیری از تداخل در رویداد ها ( بر فرض هندل راحت دو تا Job بدون اینکه برای هیچ کدوم تداخلی بوجود بیاد )

خب با مثال میریم جلو تا واستون قابل درک باشه.

مثال اولش رو واسه SQL  میزنیم، تا ببینیم به چ شکل عمل می کنه»

 - اضافه کردن رکورد به دیتابیس و خروجی که رویدادش به ما بر میگردونه:

For i = 1 To 1000
   sql.AddNonQueryToBatch("INSERT INTO table1 VALUES (?)", Array(Rnd(0, 100000)))
Next
Dim SenderFilter As Object = sql.ExecNonQueryBatch("SQL")
Wait For (SenderFilter) SQL_NonQueryComplete (Success As Boolean)
Log("NonQuery: " & Success)

نکته: ما از توابعی استفاده می کنیم که بعد از اجرای اونها رویدادی رخ بده ( توابعی که رویداد هایی برای آن ها تعریف شده )

حالا اینجا ما تابع AddNonQueryToBatch  رو داریم که می تونیم اطلاعات رو درج کنیم.اطلاعات رو به وسیله این تابع وارد و با اجرای تابع ExecNonQueryBatch اطلاعات درج در دیتابیس می شوند.برای اینکه از وضعیت درج اطلاعات با خبر شویم، رویدادی رو اختصاص دادند.این رویداد یک متغییر از نوع Boolean  داره که مشخص می کنه اطلاعات با موفقیت به دیتابیس وارد شده اند یا خیر.

به راحتی تونستیم به جای اینکه رویداد SQL_NonQueryComplete رو جدا تعریف کنیم، دقیقا بعد از کدی که واسش تعریف شده نوشتیم.دقیقا توی جاوا به همین شکل می تونید عمل کنید. می تونید رویداد رو هرجای کد تعریف کنید.

مثال از گرفتن اطلاعات از دیتابیس »

	Dim SenderFilter As Object = sql.ExecQueryAsync("SQL", "SELECT * FROM table1", Null)
	Wait For (SenderFilter) SQL_QueryComplete (Success As Boolean, rs As ResultSet)
	If Success Then
		Do While rs.NextRow
			Log(rs.GetInt2(0))
		Loop
		rs.Close
	Else
		Log(LastException)
	End If

خب فک نکنم پیچیدگی یا ابهامی توی این کد باشه.کوئری رو به تابع میدید و بعدش میایید توی رویدادش اطلاعات رو دریافت می کنید.در صورتی که مشکلی نباشه.اینجا هندل کردن خطاها خیلی بهتر شده.یعنی کد اجرا میشه و متغییر Success بهمون این اجازه رو میده تا خطایی در برناممون رخ نده و کنترلی داشته باشه.در مورد ResultSet  هم بگم که جای نگرانی نداره و چیز جدیدی نیست، همون Cursor  هستش.مشتق شده از Cursor  هستش.( جزئی از شی گرایی هستش که هر شیی از یک شیی دیگه مشتق بشه تمامی وِِِیژگی ها و قابلیت های والدش رو به ارث میبره).

 

توی پست بعدی در مورد استفادش در دانلود فایل ها و کنترل کردن رویداد هایی مثل JobDone در خدمتتون هستیم.:answercenter:

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


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

سلام

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

Sub chek_phone(ID As String,phone As String) As Boolean
	Dim s As String
	s="ID="&ID&"&phone="&phone
	ht.PostString("http://tolugroup.ir/far/chek_phone.php",s)
	Wait For (ht) Jobdone(ht As HttpJob)
	
End Sub

تصویر ارور: Capture.PNG

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 8 دقیقه قبل، arf گفته است :

سلام

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


Sub chek_phone(ID As String,phone As String) As Boolean
	Dim s As String
	s="ID="&ID&"&phone="&phone
	ht.PostString("http://tolugroup.ir/far/chek_phone.php",s)
	Wait For (ht) Jobdone(ht As HttpJob)
	
End Sub

تصویر ارور: Capture.PNG

سلام داداش تایپک قدیمی آموزشی رو بالا آوردی سوال پرسیدی؟

تایپک جداگانه بزن. موفق باشید

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در در 1396/06/14, 11:24:20، مجید آرتا گفته است :

قابلیت Wait For:

 

 

سلام خدمت همه  دوستان انجمن انسر سنتر

* یک نکته خاصی در Wait For هست که باید بهش دقت داشت 

و آنهم اینکه  وقتی از این دستور استفاده میکنید ، برنامه صبر میکند تا جواب شرط اتصال یا عدم اتصال را دریافت کند !

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

وبازگشت به عقب اتفاق افتاده و  Sub Activity_Resume متعلق به اکتیویتی قبل که دستور Wait For در آن وجود دارد دوباره اجرا میشود وخلاصه کدهاتون مختل میشه 

لذا هردستوری که داریدخصوصا انتقال به اکتیویتی بعد که قراره بعداز اتصال یا عدم اتصال  اجرا بشود را حتما سعی کنید داخل بخش شرط ها مثل نمونه زیر قرار بدین ونه خارج از شرط وزیر دستور شرط  

 

 

Dim j As HttpJob
j.Initialize("", Me)
j.Download("https://www.xxx.com") 

Wait For (j) JobDone(j As HttpJob)
    
	  If j.Success Then 'درصورت اتصال موفق 
          Log(j.GetString)
           
		  StartActivity("1")

      else'درصورت عدم اتصال موفق 
			
          StartActivity("1")

      End If

j.Release

 

 

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


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

مطالب شما نیاز است به تایید مدیران برسد

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

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.