مشاهده نسخه کامل
: ProgressBar
MohammadJavad.T
27-04-2009, 22:52
سلام
دوستان به کدی که نوشتم نگاه کنید مشکل این کد چیه که وقتی ProgressBar
پر میشه خطا میده .
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
-----------------------
سلام دوست عزیز....
واضح است که با پیش رفت حلقه مقدا Value از مقدار Maximum بیشتر میشود.
مقدار Value همواره باید بین Minimum و Maximum باشد.
این عدد 10 عزیزتان کار را خراب میکند!
MohammadJavad.T
28-04-2009, 17:38
سلام خدمت استاد عزیز h2
ممنون بابت پاسخی که دادین
کد بالا را تبدیل به این کد کردم خوب جواب داد .
البته حس میکنم زیاد بهینه نباشه نظر شما رو میخواستم بدونم از همین روش استفاده کنم ؟
این رو هم بگم قصد من فقط کپی بانک access از ادرسی به ادرس دیگر است (backup
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
البته حس میکنم زیاد بهینه نباشه نظر شما رو میخواستم بدونم از همین روش استفاده کنم ؟
آخه اینکه شما نوشته اید که یک if ساده است و من درست درکش نمیکنم
ولی ...
این رو هم بگم قصد من فقط کپی بانک access از ادرسی به ادرس دیگر است
اگر میخواهید یک تک فایل را کپی کنید...
میتوانید از دیالگو خود سیستم عامل هم استفاده کنید...
ولی اگر تمایل به کپی دستی و نشان دادن روند پیشرفت در برنامه دارید...
- فایل منبع و مقصد را به صورت Stream باز کنید.
- حجم فایل منبع را برابر Max نوار پیشرفت قرار دهید
- از فایل منبع در بلوک های مشخص (مثلاً 64KB) اطلاعات را بخوانید و در فایل مقصد بریزید
- Value نوار پیشرفت را هم با آفست پرشده فایل مقصد تغذیه کنید.
(ضمنا الآن دیگر چندان از DoEvents استفاده نمیککند..)
موفق باشید.
MohammadJavad.T
30-04-2009, 00:18
سلام خدمت H2 عزیز .
آخه اینکه شما نوشته اید که یک if ساده است و من درست درکش نمیکنم
به طور مثال وقتی یه فایل 500 مگابایتی در حال کپی شدن usage سی پی یو میره رو 50 %
نا زمانی که حلقه کاره خودش رو تموم کنه .
میتوانید از دیالگو خود سیستم عامل هم استفاده کنید...
منظور شما این که از توابع API استفاده کنم ؟
ممنون بابت توضیحات.
سلام
در ضمینه کد شما من یک ایهام دارم .... !
این رو هم بگم قصد من فقط کپی بانک access از ادرسی به ادرس دیگر است
برداشت میکنم که یک فایل قرار است کپی شود.
For i = 0 To 10
FileCopy(a, b)
برداشت میکنم که چند فایل قرار است کپی شود!
آیا منظورتان از FileCopy همان تابع قدیمی VB6 است؟
راستی بدانید که این تابع در VB.Net در واقع System.IO.File.Copy را اجرا میکند.
بالاخره مشکل سر یک فایل است یا چند فایل؟
منظور شما این که از توابع API استفاده کنم ؟
بله.
البته خود تابع System.IO.File.Copy هم از CopyFile استفاده میکند ولی این api دیالوگ و شمای دیداری برای کپی ندارد.
در مقابل SHFileOperation اینکار را مثل داخل خود MyComputer انجام میدهد، یعنی دقیقاً مثل زمانی که در خود ویندوز فرمان کپی بدهید، با همان دیالوگها و تاییدیه Replace و...
MohammadJavad.T
01-05-2009, 23:20
در ضمینه کد شما من یک ایهام دارم .... !
سلام
این کل کدی است که نوشته ام.
فقط یک فایل قرار کپی شود ! .
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آیا منظورتان از FileCopy همان تابع قدیمی VB6 است؟[
بله از همان توابعی که در VB6 خدا بیامرز بود. که در دات نت یک متد است .
راستی بدانید که این تابع در VB.Net در واقع System.IO.File.Copy را اجرا میکند.
من ابتدا از این فضا استفاده کردم ولی موقع Replace شدن به مشکل بر میخورد برا خدم هم خیلی عجیب بود :18:
که امدم از System.IO.File.Replace هم استفاده کردم بازم نشد . ولی وقتی از متد FileCopy استفاده کردم
بدون مشکل کار میکرد.
-------------------------------------------------------------------
فقط تنها مشکلی که در حال حاضر دارم اگه این فایلی که قرار کپی بشه حجمش بره بالا مثلا 100 مگ
usage سی پی یو میره رو 50 %
نا زمانی که حلقه کاره خودش رو تموم کنه .
که فکر کنم این کار اصلا بهینه نیست !!!
سلام
فقط یک فایل قرار کپی شود
:18::blink::32::3::19::22::37::blink:
میبخشید ولی شما متوجه هستید چه کدی نوشته اید؟
شما 10 بار مجزا دارید f1 را به محل f2 کپی و Replace میکنید! این که نوار پیشرفت نمیشود!!!
یعنی نوار پیشرفت شما هر بار یک خانه به جلو میرود در واقع یکبار فایل کپی شده و تمام شده!
شما در قبال کپی یک فایل 500M در واقع یک فرآینده کپی 5G را استارت میکنید. :11:
! ! ! ! !
که فکر کنم این کار اصلا بهینه نیست !!!
من هم به شدت موافق هستم!
من ابتدا از این فضا استفاده کردم ولی موقع Replace شدن به مشکل بر میخورد برا خدم هم خیلی عجیب بود
که امدم از System.IO.File.Replace هم استفاده کردم بازم نشد . ولی وقتی از متد FileCopy استفاده کردم
دو دستور زیر برابر هستند ! ! !
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و در واقع اولی خودش دومی ا اجرا میکند.
کد پیشنهادی تشریح شده در پست 4
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در صورت تمایل میتوانید از چند ریسمانی هم استفاده کنید.
موفق باشید.
MohammadJavad.T
02-05-2009, 23:31
سلام خدمت استاد عزیز H2
میبخشید ولی شما متوجه هستید چه کدی نوشته اید؟
شما 10 بار مجزا دارید f1 را به محل f2 کپی و Replace میکنید! این که نوار پیشرفت نمیشود!!!
یعنی نوار پیشرفت شما هر بار یک خانه به جلو میرود در واقع یکبار فایل کپی شده و تمام شده!
شما در قبال کپی یک فایل 500M در واقع یک فرآینده کپی 5G را استارت میکنید.
من که همون اول گفتم اصلا کد بهینه ای نیست !!!:31:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نمیدونستم پارامتر دیگری برای overwrite کردن داره ( جلل خالق :31:)
خیلی ممنون بابت سورس کدی که پیشنهاد کردین و نوشتین . :11:
:18:
اين همه كد براي كپي كردن 1 فايل؟
مگه BackGroundWorker چه مشكلي داره؟
سلام
اين همه كد براي كپي كردن 1 فايل؟
اگر ایشان نمیخواستند از دستورات فوق استفاده کنند، باید از همان File.Copy استفاده میکردند.
متد File.Copy هم فقط یک خط ناقابل است!!! و هیچ ساپورتی برای میله پیشرفت و درصد کپی ندارد.
مجموعه دستورات فوق میتواند در هر لحظه نوار پیشرفت را آپدیت کند و کاربر را از میزان کپی شده مطلع کند.
مگه BackGroundWorker چه مشكلي داره؟
همانطور که اشاره کرده بودم، دستورات فوق هم بهتر است با چند ریسمانی اجرا شود و BackgroundWorker هم یکی از راه های پیاده سازی چند ریسمانی در دات نت ولی این مسئله ربطی به نوار پیشرفت و ProgressBar ندارد.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.