مشاهده نسخه کامل
: گذاشتن پیغام Waiting در هنگام ارسال ایمیل در سی شارپ
سلام بر همه
من اومدم در برنامه ام گزینه ارسال ایمیل رو قرار دادم . و میخام برنامه زمانی که درحال ارسال ایمیل است یه پیغام به کاربر نشون بده مثلا "در حال ارسال ایمیل..." .
گزینه انتخابی خودم تردها بودن که استفاده کردم ولی چون زیاد کار با تردها رو بلد نبودم خطایی رو که داد نتونستم برطرفش کنم.( البته با Wpf هم کار میکنم).
شما دوستان چه راهی رو پیشنهاد میدین.
منتظر پیشنهادهاتون هستم...
ممنون
دوستان چرا کسی هیچی نمیگه؟؟!!!
برای این کار می توانید از یک Backgroundworker استفاده کنید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در ابتدا یک BackgtoundWorker ایجاد می شود و رویداد انجام دادن و پایان کار بدان متصل می شود. حالا با اجرای bgk عمل شما انجام می شود و در انتها نیز با اجرای Complete عمل پایان می یابد.
موفق باشید.
سلام دوست عزیز بسیار سپاسگذارم بابت پاسختون. من از کدهای نوشته شده تان در برنامه ام استفاه کردم و همون خطایی رو میده که وقتی از تردها استفاده کرده بودم میداد.
خطاش اینه:
The Calling Thread Cann't access this object because a diffrent thread owns it.
یه درخاست دیگه هم دارم
امکانش هست که این خط کد رو توضیح بدین:
button1.Dispatcher.Invoke(new Action(() => { button1.IsEnabled = false; button1.Content = "Sending"; }), null);
من هم مثل دوست قبلی این
BackgtoundWorker رو پیشنهاد میدم با یسری تغییرات کوچک.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام دوست عزیز بسیار سپاسگذارم بابت پاسختون. من از کدهای نوشته شده تان در برنامه ام استفاه کردم و همون خطایی رو میده که وقتی از تردها استفاده کرده بودم میداد.
خطاش اینه:
The Calling Thread Cann't access this object because a diffrent thread owns it.
یه درخاست دیگه هم دارم
امکانش هست که این خط کد رو توضیح بدین:
button1.Dispatcher.Invoke(new Action(() => { button1.IsEnabled = false; button1.Content = "Sending"; }), null);
اول توضیح در مورد کد بالا : Dispatcher در واقع یک queue از کارهایی هست که روی ترد مبوطه باید اجرا شوند. button1.Dispatcher به تردی اشاره میکنه که button1 توش تعریف شده. دستور بالا یک اکشن جدید رو به لیست دستورات برای اجرا اضاغه مبکنه.
() => { button1.IsEnabled = false; button1.Content = "Sending"; } یه lambada expression هست که در بالا به عنوان اکشن به کار رفته. هرگونه تغییر توی کنترل هاب WPF باید در تردی انجام دشه که اون کنترل ها ساخته شدند. در غیر این صورت شما همون خطایی که گفتی رو می گیری.
نه تنها در WPF بلکه در ویندوز فرم هم این قضیه وجود دارد. هر Thread یک حافظه ی private دارد. که دسترسی به آن فقط از طریق همان Thread امکان پذیر خواهد بود. عناصر روی فرم و یا مورد استفاده در ویندو ها جز عناصر اختصاصی هر Thread هستند لذا دستری به این عناصر می بایست از طریق همان Thread باشد پس یک Invoke این امر امکان پذیر می شود.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اطلاعات بیشتر در مورد Backgroundworker. ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
اطلاعات بیشتر در مورد Invoke. ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
موفق باشید.
سلام بر دوستان.
همچنان خطا پا برجاست . نمیدونم ترد از کدام ابجکت میخاد استفاده کنه که نمیتونه و در ترد دیگه داره استفاده میشه!
میشه یه نگاهی به کدهایی که نوشتم بندازین و بگین مشکل از کجاست.
یه توضیح بدم که با زدن دکمه Ok اول اطلاعات مربوطه رو در دیتا بیس ذخیره میکنه و بعد اقدام به ارسال ایمیل میکنه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یه مورد دیگه رو هم اضافه کنم که در کدهایی که در بالا برام گذاشتین جمله sending email... روی دکمه نشون داده میشه حالا اگه بخام در یه کادر جداگانه این پیغام رو نشون بده باید چه کار کنم؟1
خیلی خیلی ممنونم...
این کد در کلاسی که ویندو رو ساختی هست دیگه؟ دقیقا کدوم لاین ارور میده.
برای نشون دادن پیغام مربوط به ارسال میتونی از [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] استفاده کنی.
این کد در کلاسی که ویندو رو ساختی هست دیگه؟ دقیقا کدوم لاین ارور میده.
سلام دوست عزیز . بالاخره خطا رو تونستم بر طرف کنم .
بسیار بسیار ممنونم که وقت گذاشتین و این تاپیک رو دنبال کردین و صبورانه به سوالاتم جواب میدادین .هم شما و هم دوست مهربونم Msba.
موفقیت روز افزون شما دوستان رو خواهانم...
مرسی لطف داريد اميدوارم مفيد بوده باشه. :)
دوست من منم دقیقا همین مشکل شما را دارم میشه لطفا توضیح بدی چطوری برطرف شد؟؟
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.