دسته بندی ها
15:46 1401/06/14

عدم اجرای دستورات درون شرط If بدون استفاده از Breakpoint

مشخصات سوال کننده :
کاربر : mmr1401     امتیاز کاربر : 45     رتبه کاربر : 19
دسته بندی : سی شارپ WPF Sql Server Entity Framework

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2672
2 نظر
saedbfd : تابع درست کار نمیکنه یعنی چی ؟ اگر خطایی داره باید خطا رو بفرمایید. برای سوالاتتون خطا رو بفرمایید نه اینکه کلیات

امتیاز کاربر : 1664   رتبه کاربر : 1   تاریخ ثبت : 05:19 1401/06/14
mmr1401 : انتهای پرسش چند خطی توضیح بیشتر ارائه کردم. ولی خطا رخ میده واون درست اجرا نشدن تابع هست. واقعا همونطور که ابتدای پرسش گفتم مشکل عجیب و غریبی هست و خودم تا حالا همچین موردی نداشتم!!!

امتیاز کاربر : 45   رتبه کاربر : 19   تاریخ ثبت : 11:48 1401/06/15
هوش مصنوعی

پاسخ هوش مصنوعی

مشکل شما احتمالاً ناشی از یک مشکل در نحوه ی مدیریت زمان سنجی یا وضعیت (state management) در کد شما است. استفاده از breakpoint ممکن است که زمان اجرای دیباگر را به گونه ای تغییر دهد که وضعیت کلاس یا اشیای شما به درستی تنظیم شوند. در غیر اینصورت، می توانید روش های زیر را امتحان کنید:

1. **استفاده از `await` و `async`:** اگر تابع `CheckInsemination` شما به صورت غیر همزمان (asynchronous) اجرا می شود، اطمینان حاصل کنید که درست از `await` استفاده می کنید. در این صورت، تابع شما به صورت زیر می تواند نوشته شود:

private async void ComboBox_GotFocus(object sender, RoutedEventArgs e)
{
   if (PublicVariables.LimitedDisplayMenues == false)
   {
	   // do
   }
   else
   {
      if (await CheckInseminationAsync() == false)
      {
         //do
      }
   }
}

private async Task CheckInseminationAsync()
{
   var dupParam = new SqlParameter("DuplicateData", System.Data.SqlDbType.Bit)
   {
      Direction = System.Data.ParameterDirection.Output
   };
   var lidParam = new SqlParameter("LivestockID", ComboBox_id.Text);
   var insdParam = new SqlParameter("InseminationDate", PersianDateString.ConvertPersianDateTo10Characters(date.SelectedDate));
   await db.Database.ExecuteSqlCommandAsync("InseminationChk @LivestockID,@InseminationDate,@DuplicateData out", lidParam, insdParam, dupParam);
   var duplicateInsemination = (Boolean)dupParam.Value;

   return !duplicateInsemination;
}

2. **بررسی وضعیت متغیرهای جهانی:** مطمین شوید که `PublicVariables.LimitedDisplayMenues` و دیگر متغیرهایی که استفاده می کنید به درستی تنظیم شده اند و بعد از هر تغییر به روز می شوند.

3. **اضافه کردن تأخیر (Delay):** اگر زمان اجرا در مورد دستورات مهم است، می توانید از یک تأخیر مصنوعی استفاده کنید تا بررسی کنید پیشرفت برنامه به درستی انجام می شود یا خیر.

await Task.Delay(100); // 100 milliseconds delay

این ها برخی از روش هایی هستند که می توانید آزمایش کنید تا مشکل را حل کنید. همچنین به دقت بررسی کنید که آیا دقیقاً در کجا در شرط `else` کار نمی کند و مطمین باشید که هیچ استثنایی در فرآیند اجرا نمی شود.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : hamid_b 19:07 1401/06/15

این مشکل از مشکلات کمیاب و عجیب هست. در این موارد نمیشه دنبال راه حل توی کدها بود. بنظرم کارهای زیر رو انجام بدید شاید نتیجه گرفتید :

  • یکبار پروژه رو از Clean کنید و سپس Build کنید و تست کنید.
  • فایلهای موجود در پوشه های debug و release رو حذف کنید و مجدد پروژه رو Rebuild کنید.
  • یکبار Visual Studio رو ری استارت کنید و یا حتی یکبار ویندوز رو ری استارت کنید.

اگر همه این کارها رو کردید و نتیجه نگرفتید یک پروژه خالی ایجاد کنید و همین تکه کد رو ببرید توی اون پروژه خالی تست کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: 518 رتبه: 4
پاسخ دهنده : mmr1401 08:22 1401/06/16

سلام

کارهای که hamid_b گفته بود، انجام دادم و مشکل حل نشد.

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

مشکل از منطق برنامه بود که رفع شد.

ویرایش شده در جمعه 14 دی 1403 ساعت 17:12:44
به این پاسخ امتیاز بدهید    1
امتیاز: 45 رتبه: 19
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود