PDA

View Full Version : مبتدی: هنگ کردن برنامه



ghtaz2010
پنج شنبه 28 اردیبهشت 1391, 15:32 عصر
سلام دوستان

من کد زیر را در یک برنامه وارد کرده ام که کارش جستجوی یک رشته درصورت پیدا کرد ن رشته دیگه است ، بعبارتی
مثلا رشته ی "<pv>" را پیدا کرد بگرده دنبال "<pv/>" و این کار را تاوقتی به آخر متن یک Richtextbox نرسیده ادامه بده - اما مشکلی که پیش میاد اینه که در حالت عادی موقع اجرا برنامه برای لحظه ای طولانی هنگ می کنه مانند اینکه یه حلقه بی نهایت تشکیل شده باشد اما وقتی انتهای حلقه یک پیغام ایجاد می کنیم برنامه درست کار می کند.
از شما برای حل این مشکل درخواست کمک دارم.




Public Sub Search(ByVal RTB AsRichTextBox, ByVal StartCode AsString, ByVal EndCode AsString)


Dim Firstfind, Lastfind AsInteger
Dim pv As PAS
Dim Sp AsInteger


Lst.Clear() 'a Arraylist




While Sp > -1
 


Firstfind = RTB.Find(StartCode)







If Firstfind > -1 Then


Lastfind = RTB.Find(EndCode)




If Lastfind > -1 Then


RTB.Select(Firstfind + StartCode.Length, Lastfind - Firstfind - StartCode.Length)


pv.index = Firstfind


pv.Explain = RTB.SelectedText


RTB.Select(Firstfind, Lastfind - Firstfind + EndCode.Length)


RTB.Cut()






Lst.Add(pv)









EndIf






EndIf


 









Sp = Firstfind



اگر در این قسمت یه پیغام ایجاد کنیم برنامه بدون مشکل اجرا می شود!





EndWhile

فرید نجفلو
پنج شنبه 28 اردیبهشت 1391, 17:36 عصر
سلام
دوست عزیز من کد شما رو تست کردم و مشکلی نداشت(البته کمی تغیرر دادم تا بشه اجرا کرد مثلا نفهمیدم نوع PAS چی هست!)
فقط اگه شروع تگ یعنی <pv> پیدا بشه و <pv\> وجود نداشته باشه برنامه شما هنگ می کنه پس این مورد رو هم چک کنید و راه حلی راش بذارید

ghtaz2010
پنج شنبه 28 اردیبهشت 1391, 19:53 عصر
دست شما در د نکنه دوست عزیز - بررسی کردم دیدم که فقط در کامپایلر دچار هنگ میشه ولی وقتی فایل اجرایشو اجرا می کنم این مشکلو ندره یعنی مشکل از ویژوال استادیو است ، شما نمیدونید چرا اینطور میشه؟؟
درضمن PAS یه استراکچر بود که دو مقدار index و Explain رو میگیره.


باز هم متشکرم

arash020
جمعه 29 اردیبهشت 1391, 00:25 صبح
سلام
راه حل این مساله شما خیلی ساده تر از اونی هست که خودتون فکر میکنید
و microsoft فکر این جور برنامه ها رو کرده و حتم بدونید که اشکالی در کدنویسی شما وجود نداره .
شما اول از نوار ابزار , قسمت commponent , ابزار backgroand worker رو به پروژه خودتون اضافه کنید .
به قسمت پایین فرم اضافه میشه .
روی اون دابل کلیک کنید تا وارد رویداد do work ش بشید .
بعد کد اصلی برنامه تون رو که با اجرا شدنش برنامه به حالتی شبیه هنگ میره رو توی این قسمت بنویسید .
بعد برید توی رویداد کلیک دکمه ای که قبلا اون کد اصلی رو توش نوشته بودید و به جای اون کد (که برنامه رو به هنگ می انداخت...)
بنویسید :
BackgroundWorker1.RunWorkerAsync()
کد بالا باعث اجرای کد اصلی شما میشه که توی رویداد do ... نوشتین .
با استفاده از این ابزار و واگذاری کد اصلی برنامه به اون
دیگه برنامه هنگ نمیکنه چون یه حساب جدا(نخ جدید!) به ازای برنامه شما به CPU میده .

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

ghtaz2010
شنبه 30 اردیبهشت 1391, 20:45 عصر
ممنون ازتون