نمایش نتایج 1 تا 11 از 11

نام تاپیک: ایجاد backgroundworker برای لود عکس های یک دایرکتوری

  1. #1
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    Question ایجاد backgroundworker برای لود عکس های یک دایرکتوری

    وقت بخیر دوستان .من با کد زیر عکسهای یک دایرکتوری رو میخونم و میریزمش توی یه پنل حالا مشکل اینجاست که تا زمانی که تمامی عکسها لود نشن فرم نشون داده نمیشه.
    مد نظرم اینه که هر عکسی که لود میشه توی پنل نشون داده بشه و به مرور هم بقیه عکسها که لود میشه تو پنل قرار بگیرن. چجوری این رو توی یک بک گراند ورکر اضافه کنم؟




    string[] files = Directory.GetFiles( @"D:\\FileServer\Gallery");
    foreach (var filename in files)
    {

    if (filename.Substring(filename.Length - 2, 2) == "db")
    break;

    Bitmap bmp = null;
    try
    {
    bmp = new Bitmap(filename);
    }
    catch (Exception ex)
    {

    }
    var card = new PictureBox();
    card.BackgroundImage = bmp;
    card.Padding = new Padding(0);
    card.BackgroundImageLayout = ImageLayout.Stretch;
    card.MouseDown += new MouseEventHandler(card_click);
    card.Size = new Size(200, 200);
    card.Left = col+20;
    card.Top = row ;
    if (col > 400)
    {
    col = 0;
    row += 220;
    }
    else
    col += 220;


    panel1.Controls.Add(card);
    }


  2. #2
    کاربر دائمی آواتار parvizwpf
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    TEH
    پست
    2,919

    نقل قول: ایجاد بک گراند ورکر برای لود عکس های یک دایرکتوری

    اگه نیازه که تیکه تیکه عکسها رو بخونید پس باید تیکه تیکه هم فایلها رو لود کنید از جایی که میخواهید. بدین ترتیب که کدتون نشون میده همه چی یکدفعه ای دانلود میشه که مورد نظر شما نیست. پس باید هی یک فایل رو بگیرید و هی برید سراغ بعدی بکگراند ورکر وقتی کارش رو تموم کرد متد Completed خودش رو صدا میزنه . بنظرم باید تکه تکه رو فایلها کار کنید . یعنی به دفعات مورد نیاز بکرگراند ورکر رو برای دریافت فایل ها صدا بزنید

  3. #3
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: ایجاد بک گراند ورکر برای لود عکس های یک دایرکتوری

    نقل قول نوشته شده توسط parvizwpf مشاهده تاپیک
    اگه نیازه که تیکه تیکه عکسها رو بخونید پس باید تیکه تیکه هم فایلها رو لود کنید از جایی که میخواهید. بدین ترتیب که کدتون نشون میده همه چی یکدفعه ای دانلود میشه که مورد نظر شما نیست. پس باید هی یک فایل رو بگیرید و هی برید سراغ بعدی بکگراند ورکر وقتی کارش رو تموم کرد متد Completed خودش رو صدا میزنه . بنظرم باید تکه تکه رو فایلها کار کنید . یعنی به دفعات مورد نیاز بکرگراند ورکر رو برای دریافت فایل ها صدا بزنید
    پس یعنی من تو کامپلیت خودش دوباره خودشو فراخوانی کنم به شرط اینکه ایندکس اون آرایه تموم نشده باشه؟؟ درسته؟ خب حالا چجوری به اشیا فرم از داخل بک گراند ورکر دسترسی داشته باشم؟

  4. #4
    کاربر دائمی آواتار parvizwpf
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    TEH
    پست
    2,919

    نقل قول: ایجاد بک گراند ورکر برای لود عکس های یک دایرکتوری

    تقریبا میشه انطوری گفت . شما کد مربوط به یو آی رو نمیتونید در متد DoWrok بنویسید باید از آرگومانش استفاده کنید مثلا به این صورت :
    e.Result = x
    با اینکار شما دارید یک خروجی به ایونت Completed میفرستید . حالا در اون ایونت میتونید کلا با یو آی کار کنید. دوباره داخل اون اوینت با e.Result میتونید مقدار برگشتی رو بگیرید. البته نوعش object هست که دیگه باید زحمت تبدیل رو بکشید

  5. #5
    کاربر دائمی آواتار parvizwpf
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    TEH
    پست
    2,919

    نقل قول: ایجاد بک گراند ورکر برای لود عکس های یک دایرکتوری

    الان سرچ کردم یه چیزی شبیه کار شما دیدم اینو حتما بخونید:
    https://www.codeproject.com/Tips/833...ogressBar-demo

  6. #6
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: ایجاد بک گراند ورکر برای لود عکس های یک دایرکتوری

    خب من اومدم اینو به این صورت تغییر دادم. اما یه جای کارم میلنگه و منطق برنامم درست عمل نمیکنه. عکسا دونه دونه لود میشن. اما خب هیچ وقت این کار تموم نمیشه کجای کارم اشتباهه؟؟


    private void GalleryFrm_Load(object sender, EventArgs e)
    {
    _worker1 = new BackgroundWorker();
    _worker1.DoWork += new DoWorkEventHandler(worker1_DoWork);
    _worker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_worker1_RunWorkerC ompleted);
    _worker1.RunWorkerAsync();
    }

    private void worker1_DoWork(object sender, DoWorkEventArgs e)
    {

    string[] files = Directory.GetFiles(@"D:\Gallery");
    foreach (var filename in files)
    {

    if (filename.Substring(filename.Length - 2, 2) == "db")
    break;

    Bitmap bmp = null;
    try
    {
    bmp = new Bitmap(filename);
    }
    catch (Exception ex)
    {

    }
    var card = new PictureBox();
    card.BackgroundImage = bmp;
    card.Padding = new Padding(0);
    card.BackgroundImageLayout = ImageLayout.Stretch;
    card.MouseDown += new MouseEventHandler(card_click);
    card.Size = new Size(200, 200);
    card.Left = col + 20;
    card.Top = row;
    if (col > 400)
    {
    col = 0;
    row += 220;
    }
    else
    col += 220;

    CreateList(card);
    }


    }

    private void CreateList(Control card)
    {
    if (this.InvokeRequired)
    this.Invoke((Action<Control>)AddItem, card);
    else
    AddItem(card);
    }
    private void AddItem(Control card)
    {
    panel1.Controls.Add(card);
    }

    آخرین ویرایش به وسیله رامین مرادی : سه شنبه 12 دی 1396 در 15:12 عصر

  7. #7
    کاربر دائمی آواتار parvizwpf
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    TEH
    پست
    2,919

    نقل قول: ایجاد بک گراند ورکر برای لود عکس های یک دایرکتوری

    خب لینک رو دیدید؟ لینک رو من تست کردم خوراک کار شماست یه بار با اون روش برید. شاید تعداد دفعات رو اشتباه میده

  8. #8
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: ایجاد بک گراند ورکر برای لود عکس های یک دایرکتوری

    نقل قول نوشته شده توسط parvizwpf مشاهده تاپیک
    خب لینک رو دیدید؟ لینک رو من تست کردم خوراک کار شماست یه بار با اون روش برید. شاید تعداد دفعات رو اشتباه میده
    کد شمارو دیدم اما مربوط به یه چیز دیگس. کد رو گذاشتم تو پست 6 یه بار بخونید. خودتونم میتونید اجرا بگیرید

  9. #9
    کاربر دائمی آواتار parvizwpf
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    TEH
    پست
    2,919

    نقل قول: ایجاد بک گراند ورکر برای لود عکس های یک دایرکتوری

    خب اینطور که من میبینم باز هم اومدید کد یو آی رو داخل dowork نوشتید. قرار نشد حلقه فور داخل dowork باشه باید پس ار هبار خوندن یک فایل در completed باشه الان کامپلیتد کجاست؟

  10. #10
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: ایجاد بک گراند ورکر برای لود عکس های یک دایرکتوری

    خب تا اینجا پیش رفتم و درست عمل میکنه. فقط یه مشکل وجود داره وقتی موقع لود عکسها پنل رو که اسکرول میکنم اون row که تعریف کردم بهم میخوره.مثلا یه کم پایینتر میافته عکسا. ولی اگه اسکرول نکنم مشکلی پیش نمیاد. اینم راهنمایی کنید عالی میشه.



    int row = 0;
    int col = 0;
    private BackgroundWorker _worker1;
    string[] files;
    int index = 0;
    public GalleryFrm()
    {
    InitializeComponent();
    }
    Bitmap bmp = null;
    private void GalleryFrm_Load(object sender, EventArgs e)
    {
    _worker1 = new BackgroundWorker();
    _worker1.DoWork += new DoWorkEventHandler(worker1_DoWork);
    _worker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_worker1_RunWorkerC ompleted);
    AppSeetingClass.SetSetting();
    files = Directory.GetFiles(@"D:\FileServer\Gallery");
    if (files.Length > 0)
    {
    MessageBox.Show(files.Length.ToString());
    startdowork();
    }
    }
    public void startdowork()
    {
    if (index < files.Length)
    {
    _worker1.RunWorkerAsync(files[index]);
    index++;
    }
    }

    private void _worker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {

    startdowork();

    }

    private void worker1_DoWork(object sender, DoWorkEventArgs e)
    {
    if (e.Argument.ToString().Substring(e.Argument.ToStri ng().Length - 2, 2) != "db")
    {
    bmp = new Bitmap(e.Argument.ToString());
    var card = new PictureBox();
    card.BackgroundImage = bmp;
    card.Padding = new Padding(0);
    card.BackgroundImageLayout = ImageLayout.Stretch;
    //card.MouseDown += new MouseEventHandler(card_click);
    card.Size = new Size(200, 200);
    card.Left = col + 20;
    card.Top = row;
    if (col > 400)
    {
    col = 0;
    row += 220;
    }
    else
    col += 220;
    CreateList(card);
    }
    }
    private void CreateList(Control card)
    {
    if (this.InvokeRequired)
    this.Invoke((Action<Control>)AddItem, card);
    else
    AddItem(card);
    }
    private void AddItem(Control card)
    {
    panel1.Controls.Add(card);
    }



    اینم تصویر بعد از اسکرول
    عکس های ضمیمه عکس های ضمیمه
    • نوع فایل: jpg 2.jpg‏ (42.9 کیلوبایت, 13 دیدار)

  11. #11
    کاربر دائمی آواتار parvizwpf
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    TEH
    پست
    2,919

    نقل قول: ایجاد بک گراند ورکر برای لود عکس های یک دایرکتوری

    اینطور مشکل ها نیاز به تریس داره که چرا اتفاق میافته . دلیلش رو منم نمیدونم

تاپیک های مشابه

  1. آموزش: ایجاد panel scroll برای نمایش عکس های یک پوشه
    نوشته شده توسط ghasem110deh در بخش C#‎‎
    پاسخ: 2
    آخرین پست: سه شنبه 30 دی 1393, 15:14 عصر
  2. سوال: کپی کردن تمام عکس های یک دایرکتوری
    نوشته شده توسط ravand در بخش PHP
    پاسخ: 10
    آخرین پست: چهارشنبه 07 تیر 1391, 16:08 عصر
  3. برنامه ای برای ذخیره عکس های یک دوربین
    نوشته شده توسط amn390 در بخش برنامه نویسی با MFC و ++Visual C
    پاسخ: 0
    آخرین پست: جمعه 27 آذر 1388, 07:27 صبح
  4. برنامه ای برای ذخیره عکس های یک دوربین
    نوشته شده توسط amn390 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 0
    آخرین پست: جمعه 27 آذر 1388, 06:42 صبح
  5. سوال: مشکل با نمایش عکس های یک دایرکتوری
    نوشته شده توسط khz-web1 در بخش ASP.NET Web Forms
    پاسخ: 8
    آخرین پست: چهارشنبه 06 آبان 1388, 02:38 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •