PDA

View Full Version : اجرا نشدن بقیه کد



miladkj
جمعه 16 مرداد 1394, 02:02 صبح
سلام به تمام دوستان برنامه نویس، من میخواستم یک فرم لودینگ در هنگام انجام عملیات نشون بدم ولی چون از Thread ها چیزی بلد نبودم،سراغ یک فیلم آموزشی رفتم و برنامم رو نوشتم ولی درست اجرا نمیشه. یعنی زمانی که با استفاده از تردها اون فرم لودینگ رو نشون میدم دیگه سراغ بقیه کد نمیره ک اجراش کنه و قفط فرم لودینگ رو تا اخر نشون میده. دوستان نمیدونم منظورمو خوب رسوندم یا ن ولی اگه این دوتا عکسی که ازش گرفتم رو ببینین ب راحتی متوجه منظورم میشین.
باتشکر
عکس2 (http://uupload.ir/files/kl0d_class.png)

عکس 1

(http://uupload.ir/files/qfzp_frm.png)

دلتنگ اسمان
جمعه 16 مرداد 1394, 04:44 صبح
با سلام
تا زمانی که فرم بسته نشه برنامه ادامه پیدا نمیکنه. و این ارتباطی به ترد نداره .
یعنی برنامه فرم رو داره به کاربر نشون میده بعد از اینکه کاربر اون فرم رو بست ادامه کار انجام میشه.
اگه میخوای فرم لودینگ بعد از چند ثانیه خودش بسته بشه باید داخل تایمر تعریف کنی که بعد از اتمام زمان معین شده ادامه کدها اجرا بشه.

aliebrahimi1900
جمعه 16 مرداد 1394, 08:48 صبح
دوست عزیز من تا حالا کار نکردم ولی فکر کنم باید عملیات لود برنامتو توی لود اون فورم لود بنویس مثلا تو لودش اول فورم اصلی تو لود کنی بعد دیتا هاشو یا هرچیز دیگه بعد فورم اصلی رو نمایش بدی و آخرشم فورم لودتو ببندی



(نگارش ما هم کلا شد لود )

behzadkhan
جمعه 16 مرداد 1394, 18:23 عصر
با سلام

دوست عزیز

اگر برنامه شما خطا نمی دهد و در همان حالت باقی می ماند احتمالا به خاطر ShowDialog هست.

ماهیت ShowDialog به این شکل هست که تا زمانی که آن فرم بسته نشده و یا خصوصیت DialogResult آن تغییر نکرده باشد. اجرای خط بعد از FW.ShowDialog() ادامه پیدا نخواهد کرد.

پس برای اینکه ادامه کد اجرا شود یا به جای ShowDialog() از Show() استفاده کنید.

و یا

خصوصیت DialogResult فرمی که بازه شده را تغییر دهید

مثلا


this.DialogResult = System.Windows.Forms.DialogResult.OK;


و یا اینکه فرم را ببندید تا ادامه کد انجام شود.

با تشکر

miladkj
جمعه 16 مرداد 1394, 21:26 عصر
سلام برادر مرسی از راهنمایی ولی بازم فایده نداشت و همچنان گیر میکنه توی همون لودینگ و بقیه کد اجرا نمیشه
اون ShowDialog() رو تبدیل به Show() کردم ولی باز فایده ای نداشت

behzadkhan
جمعه 16 مرداد 1394, 21:47 عصر
سلام برادر مرسی از راهنمایی ولی بازم فایده نداشت و همچنان گیر میکنه توی همون لودینگ و بقیه کد اجرا نمیشه
اون ShowDialog() رو تبدیل به Show() کردم ولی باز فایده ای نداشت

با سلام

دوست عزیز

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

و در مدیریت کردنشان مشکل دارید.

ببینید وقتی یک ترد جدید ایجاد می شود کاملا مجزا(نه اینکه از برنامه اصلی مجزا باشد) اجرا می شود. در واقع فرزند ترد اصلی می شود.

خوب حالا نمی شه به راحتی مثلا بهش بگیم که ادامه ترد اصلی بعد از یک کدی از ترد فرزند انجام شود.

من اینا را گفتم که یک دید کلی پیدا کنید.

================================================== =========================

فکر می کنم باید کد بیشری بزاردید تا متوجه شویم که کدام کد برای کدام ترد هست.

همچنین

اگر کد را بصورت عکس می کذارید. لطفا لینک آنرا قرار ندهید. بلکه بصورت مستقیم عکس را وارد کنید.

البته بهتر هست که خود متن کد را قرار دهید.

برای اینکار سایت امکانات کاملی دارد.

================================================== ==========================
امیدوارم در انتها مشکلتان برطرف گردد.

با تشکر

ahmadreza.s
جمعه 16 مرداد 1394, 22:38 عصر
با سلام

دوست عزیز

اگر برنامه شما خطا نمی دهد و در همان حالت باقی می ماند احتمالا به خاطر ShowDialog هست.

ماهیت ShowDialog به این شکل هست که تا زمانی که آن فرم بسته نشده و یا خصوصیت DialogResult آن تغییر نکرده باشد. اجرای خط بعد از FW.ShowDialog() ادامه پیدا نخواهد کرد.

پس برای اینکه ادامه کد اجرا شود یا به جای ShowDialog() از Show() استفاده کنید.

و یا

خصوصیت DialogResult فرمی که بازه شده را تغییر دهید

مثلا


this.DialogResult = System.Windows.Forms.DialogResult.OK;


و یا اینکه فرم را ببندید تا ادامه کد انجام شود.

با تشکر


نه فک نکنم ربطی داشته باشه !

آخه سی پی یو یه زمان مشخصی به هر ترد میده !

بعد از اونکه زمانش تموم شد میره سراغ ترد بعدی و دستورات اون رو اجرا میکنه !

البته حقیقتش خودمم اطلاع دقیقی ندارمااا ! ولی طبق اون چیزی که از خوندم(تئوری) اینجوری باید باشه !

محمد آشتیانی
شنبه 17 مرداد 1394, 00:56 صبح
سلام
به این خاطره که شما باید متد StartWait رو فراخوانی کنی که ترد استارت بشه و دیالوگ انتظارتون از طریق یک ترد دیگه ایجاد بشه ، شما داری مستقیم متد ShowFrm رو صدا میکنی که اینجوری اصلا تردی ایجاد نمیشه.



موفق باشید.

miladkj
شنبه 17 مرداد 1394, 12:23 عصر
باسلام آقای Mohammad.Ashtiani (http://barnamenevis.org/member.php?12815-Mohammad-Ashtiani) عزیز کاری ک گفتین رو انجام دادم ولی اینسری اصلا فرم لودینگ رو نشون نداد و فقط عملیات پشتیبان گیری رو انجام میده و درنهایت هم پیغام موفقیت رو نشون میده.
آقای behzadkhan (http://barnamenevis.org/member.php?244640-behzadkhan) عزیز من کلا فقط یک ترد برای فرم لودینگم ایجاد کردم

miladkj
یک شنبه 18 مرداد 1394, 01:46 صبح
کسی نیست کار ما رو راه بندازه؟

behzadkhan
یک شنبه 18 مرداد 1394, 13:18 عصر
کسی نیست کار ما رو راه بندازه؟

با سلام

دوست عزیز

من فکر می کنم که یا باید برنامه را ضمیمه کنید.

و یا

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

با تشکر

miladkj
یک شنبه 18 مرداد 1394, 14:11 عصر
سلام

لینک دوتا فرم مربوطه (http://uplod.ir/m782mbi4ig5y/Desktop.zip.htm)

behzadkhan
یک شنبه 18 مرداد 1394, 17:12 عصر
با سلام

دوست عزیز

من یک پروژه ساده که کار شما را انجام می دهد درست کرده ام.

و

بدون مشکل کار می کند

فایل frmMain.cs


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;


namespace test_Thread
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}


private void btnThreadTest_Click(object sender, EventArgs e)
{
WaitClass wait = new WaitClass();
wait.StartWait();


Thread.Sleep(3000);




wait.EndWait();


MessageBox.Show(" عملیات پشتیبان گیری با موفقیت انجام شد ", "پیام سیستم", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}




فایل WaitClass.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;


namespace test_Thread
{
class WaitClass
{
private static Thread thread;
public void StartWait()
{
thread = new Thread(new ThreadStart(ShowFrm));
thread.Start();
}


public void ShowFrm()
{
FrmWaiting FW = new FrmWaiting();
FW.ShowDialog();
}


public void EndWait()
{
thread.Abort();
thread = null;
}
}
}




================================================== ======================================

لینک دانلود:

134071

================================================== ======================================

اگر باز هم به نتیجه نرسیده اید به خاطر این هست که یا

این سه خط مشکل دارند:


BackupDeviceItem bkpDevice = new BackupDeviceItem(savefd.FileName, DeviceType.File);
backupdb.Devices.Add(bkpDevice);
backupdb.SqlBackup(srvr);


و یا اینکه شما مقصود خودتان را به درستی بیان نکرده اید.

================================================== ===========================================

با تشکر

miladkj
سه شنبه 20 مرداد 1394, 13:45 عصر
مشکل از همین کدهای مربوط به پشتیبان گیری هست و درست نشد
کلا دیگه بی خیالش شدم
دست گلت هم درد نکنه داداشbehzadkhan (http://barnamenevis.org/member.php?244640-behzadkhan)

behzadkhan
سه شنبه 20 مرداد 1394, 14:59 عصر
مشکل از همین کدهای مربوط به پشتیبان گیری هست و درست نشد
کلا دیگه بی خیالش شدم
دست گلت هم درد نکنه داداشbehzadkhan (http://barnamenevis.org/member.php?244640-behzadkhan)

با سلام

دوست عزیز

خوب ما همه در این سایت حضور پیدا کرد و یک سری اهداف داریم.

مطمئنا هدف مشترک همه کمک رسانی به حل مشکلاتی که کاربران به آن برخورد می کنند هست.

من هفته پیش با شی Backup و Restore‌ از رفرنس Microsoft.SqlServer.Management.Smo آشنا شدم و در نهایت توانستم در یک برنامه از آنها استفاده کنم.

اگر در توانم باشد حتما به شما کمک خواهم کرد.

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

با تشکر