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

AnswerCenter

مرکز پاسخگویی به سوالات برنامه نویسی

  • مرجع پاسخگویی
  • تولید آموزش
  • سفارش پروژه

درخواست سفارش پروژه

اطلاعیه

کاربر گرامی

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

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


پست های پیشنهاد شده

مجید آرتا    5,637

مدیر کل سایت

قابلیت 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:

  • پسندیدن 8

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


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

کاربر عادی

سلام

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

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

  • ناراحت 1

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
vistamobile    1,629

پاسخگو و راهنما

در 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

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

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

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


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

پاسخگو و راهنما

در در 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

 

 

  • تشکر 1

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


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

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

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

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری

×