واضح آرشیو وب فارسی:سایت ریسک: smahdis29-09-2006, 06:41 AMبا سلام آيا كسي اينجا ميدونه كه چطوري ميتونم چندين هزار آيتم را در عرض يك يا چند ثانيه در ListView قرار بدم. براي مثال من ميخوام يك برنامه بنويسم كه تمام هارد ديسك را در عرض چند ثانيه جستجو كنه مثل همين نرم افزار تربو سرچر Turbo Searcher. من تمام كارهاي ديگر را از قبيل ايندكس كردن يا همان جمع آوري تمامي نام فايلهاي هارد ديسك در يك فايل رو انجام دادم و فقط تنها مشكلي كه مانده اين هست كه چطور ميتونم چندين هزار نام فايل رو در عرض يك يا چند ثانيه در ListView قرار بدم. من در ابتدا گرفتم تمامي نام فايلها رو در يك فايل تكستي يا متني جمع آوري كردم كه حدودآ چندين هزار تا خط ميشن بعد با خودم فكر كردم كه بگيرم از يك عبارت For...Next استفاده كنم كه هر خطي رو دونه به دونه در ليست اضافه كنه ولي متوجه شدم كه اينطوري حدود 3 الي 5 دقيقه طول ميكشه كه نام تمام فايلها در ليست قرار داده بشوند. لطفآ و خواهشآ اگر ممكنه يكي كمكم كنه!!! :sad: mohseni1234501-10-2006, 10:48 PMشما اول اون فایل متنی که داری رو در اول برنامت بخون و بزار توی یه متغیر بعد توی متغیر سرچ کن این که خط به خط از روی فایل می خونی خیلی سرعتو میاره پایین منم دارم یه برنامه درست می کنم که کار ویندوز اکسپلورر رو انجام بده مثلا مشاهده ی فایل ها پاک کردن یا کپی کردن منم از همین روش استفاده کردم smahdis02-10-2006, 05:36 AMسلام آقاي mohseni12345 خيلي ممنون كه جواب داديد. من هم در ابتدا ميخواستم كاري مثل كار شما يعني ساخت ويندوز ايكسپلورر را انجام بدم ولي ديدم از اين كار خوشم نمياد و مورد پسند من نبود. راستي اين كاري كه شما گفتي رو همون اول انجام دادم ولي بازهم همون چند دقيقه طول ميكشه تا در ليست اضافه بشوند. من اين كار رو كردم اگر منظور شما اين نبود خواهش ميكنم كه بيشتر توضيح بديد: من در ابتدا فايل رو در يك متغير از نوع رشته جا سازي كردم بعد يك متغير از نوع رشته خالي ساختم بعد از يك عمل For Each...Next استفاده كردم ولي باز هم همون 2 الي 3 دقيقه طول ميكشه!! لطفآ آقاي mohseni12345 و همچنين هر كس ديگه اي كه داره اين مطلب رو ميخونه و ميتونه كمكم كنه نظرش رو بنويسه. ممنون...خدايا به اميد تو. someone02-10-2006, 05:31 PMسلام. شما بايد همزمان كه فايلي رو پيدا ميكنيد در ListView قرار بديد. به اين نوع برنامه ها MultiTasking گفته ميشه.بايد از دو Thread در برنامتون استفاده كنيد. يكي براي Serach و ديگري براي قرار دادن اسامي در ListView . در ضمن چون منابع بين دو Thread مشترك هستند بايد از Mutex يا CriticalSection استفاده كنيد تا بتونيد از يك منبع استفاده كنيد. smahdis03-10-2006, 04:50 AMبا تشكر از شما آقاي Someone اگر ميشه يكم بيشتر در مورد Thread ها توضيح بديد راستش رو بخواين من اين موضوع thread ها برام شده مشكل چون اصلا ازش سر در نمي آرم. ممنون ميشم اگر توضيح بيشتري بديد. someone03-10-2006, 05:17 PMدوباره سلام. حتما تا حالا برنامه هايي رو ديديد كه همزمان چند كار باهم انجام ميدن. مثل MSWord كه هنگامي كه شما در حال تايپ كردن هستيد همزمان غلط هاي املايي شما چك ميشه. و يا بزرگترين مثالش كه خود Windows هست .شما ميتونيد همزمان هم رايت كنيد و هم موسيقي گوش كنيد وغيره.به اين اجراي همزمان multi-treading گفته ميشه. اصطلاحا بهش ريسمان هم گفته ميشه. خيلي ساده تر در مورد برنامه ي شماست. شما دو حلقه( Loop ) داريد كه همزمان با هم كار ميكنند. در حالت عادي بايد اولين حلقه اجرا بشه و بعد حلقه ي بعد.ولي وقتي شما از اين حلقه ها در دو Thread جداگانه استفاده ميكنيد OS كنترل حلقه ها رو بدست ميگيره و اجازه ميده كه دو حلقه همزمان با هم كار كنند. بدون اينكه مشكلي پيش بياد.ولي اگه منبعي بين اين دو Thread مشترك باشند زمان بندي دسترسي به اين منبع (كه در برنامه ي شما يك Buffer هست ) رو بايدخودتون كنترل كنيد.اين كار با استفاده از Mutex انجام ميشه. كه در زمان مورد نظر ميتونه منبع رو Lock يا UnLock كنه. اينها از مباحث پيشرفته ي برنامه نويسي هستند. متاسفانه من با VB آشنا نيستم و با ++C و VC و #C كار ميكنم. خود Thread Function به اين صورت تعريف ميشه البته در ++C كه يه تابع static هست كه يك آرگومان از نوع LPVOID داره. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! براي راه اندازي و متوقف كردن در VC از AfxBeginThread استفاده ميشه.ولي شما ميتونيد از اين API ها استفاده كنيد: CreateThread ResumeThread SuspendThread ExitThread ولي بدنه ي اصلي تابع Thread كه به اون ThreadProc هم گفته ميشه به شكل بالا تعريف ميشه. سعي كردم خلاصه و مفيد توضيح بدم. ميتونيد در باره يWorker Thread مطالب زيادي پيدا كنيد. اگه مشكلي پيش اومد اطلاع بديد. ممنون. smahdis05-10-2006, 06:44 AMبا سلام دوباره آقا Someone خيلي ممنون و دستتون درد نكنه به خاطر توضيحاتتون. ولي باز هم همان مشكل اول وجود دارد مشكل اينجاست كه زماني كه از Thread ها استفاده ميكنيم تنها فرقي كه دارد اين است كه برنامه هنگ يا به قول خودماني قفل نميكند. تا قبل از آن اگر از Thread ها استفاده نكنيم برنامه در همان زماني مشغول اضافه كردن نام فايلها در ليست ميباشد هنگ ميكند و بعد از آن دوباره به حالت عادي بازگشته و ليست را نشان ميدهد ولي هنگامي كه از thread ها استفاده ميكنيم برنامه به جاي اينكه به مدت دو الي سه دقيقه هنگ كند حالت عادي خود را در پيش ميگيرد و نام فايلها را در ليست اضافه ميكند و اين هم همان دو الي سه دقيقه طول ميكشه تا تمام نام ها در ليست قرار بگيرند... يعني باز هم برگشتيم به همان خانه اول! تنها چيزي كه معلوم است اين هست كه زماني كه از حلقه ها براي اضافه كردن در ليست استفاده ميكنيم اين مشكل پيش مي آيد در حالت عادي اگر ما بدون استفاده از حلقه ده هزار خط را در يك تكست باكس بريزيم خيلي سريعتر خواهد تا اينكه بخواهيم به صورت خط به خط و هر خط را به عنوان يك آيتم در ليست قرار دهيم. يك موضوع ديگر نيز مي ماند و ان اينكه در ListView خاصيتي به نام Addrange دارد كه به ظاهر ميتواند يك محدوده از اطلاعات را در ليست قرار دهد ولي من نميدونم چطوري ميشه همين كاري رو كه من ميخواهم انجام بدم رو با اين خاصيت انجام بدم تا ديگه نيازي به استفاده از For Each..Next نباشه. خيلي ممنون. mohseni1234505-10-2006, 06:07 PMباز هم همان مشكل اول وجود دارد مشكل اينجاست كه زماني كه از Thread ها استفاده ميكنيم تنها فرقي كه دارد اين است كه برنامه هنگ يا به قول خودماني قفل نميكند. تا قبل از آن اگر از Thread ها استفاده نكنيم برنامه در همان زماني مشغول اضافه كردن نام فايلها در ليست ميباشد هنگ ميكند و بعد از آن دوباره به حالت عادي بازگشته و ليست را نشان ميدهد ولي هنگامي كه از thread ها استفاده ميكنيم برنامه به جاي اينكه به مدت دو الي سه دقيقه هنگ كند حالت عادي خود را در پيش ميگيرد و نام فايلها را در ليست اضافه ميكند و اين هم همان دو الي سه دقيقه طول ميكشه تا تمام نام ها در ليست قرار بگيرند... يعني باز هم برگشتيم به همان خانه اول. در حالت معمولی اگه خواستی کامپیترت هنگ نکنه باید از دستور DoEvents استفاده کنی کار این دستور اینه که به ویندوز میگه وقتی یه دستور رو به طور کامل انجام دادی بعد برو سراغ دستور بعدی این کار از هنگ کردن کامپیوتر جلوگیری می کنه yonsen18-06-2007, 03:28 PMسورس نميذاريد؟ يك جستجو كننده با قابليت ادامه جستجو ميخام yonsen19-06-2007, 07:42 AMپس چي شد :13: anvar.net19-06-2007, 09:36 AMيك جستجو كننده با قابليت ادامه جستجو ميخام یعنی چی؟ منظورت اینه که با تایپ حروف لغاتی که حروف مورد نظر را در اول خود دارند انتخاب بشوند یا نه؟ _H2_19-06-2007, 11:35 AMسلام حتماً از چند ریسمانی استفاده کنید و راحتترین راه هم کامپونت BackgroundWorker است که در تولبار وجود دارد. و خیلی هم ساده است! با دستور RunWorkerAsync ریسمان دوم شروع میشود و میتوانید در رویداد DoWork کار مورد نظر را تایپ کنید. yonsen20-06-2007, 06:57 AMبا سلام اول از همه اينو بگم كه نميخام تو برنامه دكمه يا چيزه ديگه اي باشه تا كاربر كليك كنه يعني بعد از كليك روي فايل اجرايي شروع به جستجو كنه ودر آخر هم نتيجه را هم تو يك txt. ذخيره كنه anvar.net عزيز منظورم اين بود: فرض كنيد هنگامي كه برنامه در حال جستجو هست به هر دليلي قطع بشه مثلا با Restart يا Log of يا Turn off شدن كامپيوتر . بعد از بالا اومدن ويندوز از همون جايي كه قطع شده بود ادامه بده مثلا ادامه كارو از يك txt. ديگه بخونه طبعا بايد تو استارت آپ باشه ولي فعلا ادامه جستجو برام مهمتره . براي استارت اپ كار ديگه اي هم ميشه كرد. راستي دوستان مي شه سورس بذاريد ؟ لطفا :20: ممنون anvar.net و _H2_ عزيز :11: _H2_20-06-2007, 11:17 AMسلام اگر یک لیست از فایلها میخواهید این کار با قدرت VB 8 میشود یک خط! برای این کار در VB 8 کدی یک خطی کافیست!!!! بازم برید بگید VB 8 بد جاییه! قدرت را حال کنید!!!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! سریعتر از این کد یک خطی چیزی پیدا نمیکنید! اما فقط لیست میده و مشخصات نداره. فرض كنيد هنگامي كه برنامه در حال جستجو هست به هر دليلي قطع بشه مثلا با Restart يا Log of يا Turn off شدن كامپيوتر . بعد از بالا اومدن ويندوز از همون جايي كه قطع شده بود ادامه بده مثلا ادامه كارو از يك txt. ديگه بخونه بیخیال! موفق باشید.! yonsen22-06-2007, 06:38 AMاگه دقيقا اون چيزي كه ميخاستم پيدا كردي با سورسش برام بذار .....در ضمن بخاطر راهنمايي ممنونم ...... :46: Shahrdar22-06-2007, 10:16 AMسلام دوست عزیز من فقط میخواستم یه نکته رو بگم ..... سرعت listbox از listview حداقل 3 بار بیشتره اگه میتونی از این مسئله استفاده کن _H2_23-06-2007, 10:25 AMسلام اگه دقيقا اون چيزي كه ميخاستم پيدا كردي با سورسش برام بذار .....در ضمن بخاطر راهنمايي ممنونم ...... :46: نمیدانم، منظورتان با من بود؟؟؟؟؟؟؟؟؟؟؟؟؟؟!!!!!!!!!!!!! :13: اگر اینطور است باید بگویم من فقط کدی را دادم که میتواند در یک تک خط واحد نام تمام فایلهای داخل یک دایرکتوری را به String تبدیل کند که میشود آن را رد TextBox ریخت و یا در یک فایل، همین، کدش هم همان است که نوشتم و چیز دیگری ندارد. اگر ListBox یا ListView میخواهید باید در یک حلقه For Each نتیجه System.IO.Directory.GetFiles را اسکن کنید و به کنترلر اضافه کنید که کلاً میشود سه خط کد و امیدوارم برای سه خط کد ناقابل سورس نخواهید! :31: سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 451]