دسته بندی ها
15:21 1400/05/14

نمایش انیمیشن و استفاده از Thread هنگام واکشی اطلاعات از دیتابیس در WPF

مشخصات سوال کننده :
کاربر : mojtabahakimian     امتیاز کاربر : 155     رتبه کاربر : 10
دسته بندی : سی شارپ WPF

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3724
5 نظر
pedram_khan : کدهایی که قرار دادید رو من کپی میکنم توی پروژه ام ولی خطا میده. کدهای xaml رو تونستم اصلاح کنم ولی کدهای بخش سی شارپ رو نشد. خودتون تست کردید و مطمئن هستید کدها درسته ؟

امتیاز کاربر : 277   رتبه کاربر : 6   تاریخ ثبت : 01:38 1400/05/15
mojtabahakimian : لینک پروژه رو گذاشتم لطفا بررسی بفرمایید ممنونم از همگی که وقت میذارید

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 05:00 1400/05/15
mojtabahakimian : این یه مشکل اساسی هست چون من میخوام کاربر در زمان عملیات های سنگین و زمان بر با یک انیمیشن پویا یا یک حرکت دیگه بدون استفاده از گیف و اینجور چیزا کاربر رو سرگرم کنم تا عملیات به پایان خودش برسه

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 08:00 1400/05/15
fateme : منم پروژه رو دانلود و تست کردم ظاهرا درست کار میکنه. اما برای اطلاعات با حجم بالا تست نکردم. اگر نتیجه ای گرفتم حتما همینجا براتون مینویسم.

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 04:05 1400/05/16
mojtabahakimian : ممنون از همگی ممنون میشم

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 10:05 1400/05/16
ادامه نظرات ...
هوش مصنوعی

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

برای حل مشکل شما و جلوگیری از متوقف شدن انیمیشن در زمان اجرای کارهای سنگین SQL در WPF، می توانیم از Task و async/await استفاده کنیم. این کار به ما اجازه می دهد که عملیات سنگین را در یک ترد جداگانه انجام دهیم و در عین حال انیمیشن در ترد رابط کاربری (UI thread) اجرا شود.

در کد زیر، تغییرات لازم بر روی متد Command4_Click اعمال شده است:

private async void Command4_Click(object sender, RoutedEventArgs e)
{
    // start the animation
    Storyboard sb = (Storyboard)FindResource("RotationBtn");
    Storyboard.SetTarget(sb, Command4);
    sb.Begin();

    // start the background database operation asynchronously
    await Task.Run(() => DoMyCodes());

    // stop the animation and display the results
    sb.Stop();
    // می توانید بعد از این قسمت هر کاری را که نیاز دارید انجام دهید
}

و البته باید اطمینان حاصل کنید که متد DoMyCodes به شیوه ای که مناسب است بدون مشکلات خنثی کننده صدا اجرا می شود. به عنوان مثال، اطمینان حاصل کنید که در این متد از UI thread استفاده نمی کنید، مانند اجرای مستقیم MessageBox.Show() یا دسترسی به کنترل های UI.

اگر نیاز دارید تا نتایج را در UI نمایش دهید، می توانید از @Dispatcher برای بروزرسانی رابط کاربری بعد از اتمام عملیات استفاده کنید.

در نهایت، مطمین شوید که انیمیشن شما به درستی تعریف شده است و کد XAML شما بدون مشکل است، چون انیمیشن ممکن است تحت تأثیر UI thread قرار گیرد.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود