نمایش انیمیشن و استفاده از Thread هنگام واکشی اطلاعات از دیتابیس در WPF
سلام من یک دکمه دارم که دریافت اطلاعات از دیتابیس انجام میده که زمانی نسبتا زیادی طول میشکه این کار رو انجام بده. حالا در رویداد Click میخوام زمانی که کلیک کرد یک انیمیشن به اون نشون داد بشه.
و بعد از اتمام پردازش انیمیشن متوقف بشه.
برای اینکه انیمیشن من در زمان پردازش متوقف نشه چون تمرکز میره روی عملیات سنگین SQL انیمیشن هم متوقف میشه و بعد از اینکه کار گرفتن دیتا از SQL انجام شد.
انیمیشن آزاد میشه که حالا یا ادامه یا متوقف بشه.
برای این مشکل رفتم سراغ Thread اما برای برای هم چین چیزی درست کار نمیکنه.
شما برای اینکه بهتر بفهمید این کد xaml رو توی یک پروژه تست کنید :
دستورات xaml :
<Window.Resources>
<Storyboard x:Key="RotationBtn" RepeatBehavior="Forever">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" Storyboard.TargetName="Command4">
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="720"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Grid>
<Button x:Name="Command4" Content="Next Stage" Margin="599,406,304,84" Width="130" Height="37" FontSize="8" Click="Command4_Click" Background="#FFDDDDDD" BorderBrush="{x:Null}" RenderTransformOrigin="0.5,0.5">
<Button.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Button.RenderTransform>
</Button>
</Grid>
اینم کد سی شارپش :
private 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
var t = new Thread( ( ) =>
{
DoMyCodes();
// stop the animation and display the results
App.Current.Dispatcher.Invoke( ( ) =>
{
Storyboard sb = (Storyboard)FindResource( "RotationBtn" );
sb.Stop( );
// . . .
});
})
{
IsBackground = true
};
t.Start( );
}
private void DoMyCodes()
{
if ((string.IsNullOrEmpty(MyTextBox.Text))
{
MessageBox.Show("please enter valid parameter");
return;
}
else
{
var quer_RST = dbms.Database.SqlQuery<string>("with Letters as ( select letter from ( values ('a'), ('s'), ('d'), ('f'), ('g'), ('h'), ('j'), ('k') ) l(letter) ),Bitmasks as ( select cast(letter as varchar(max)) as letter, cast(power(2, row_number() over (order by letter) - 1) as int) as bitmask from Letters ),Permutations as( select letter as permutation, bitmask from Bitmasks union all select p.permutation + b.letter, p.bitmask ^ b.bitmask from Permutations p join Bitmasks b on p.bitmask ^ b.bitmask > p.bitmask)select permutation from Permutations where bitmask = power(2, (select count(*) from Letters)) - 1");
}
}
اما مسیله اینکه Thread درست کار نمیکنه و همچنان همون مشکل رو داره
و اما چیزی که باید باشه ولی نیست :
خواهش میکنم در این مورد کمک کنید
باتشکر
لینک پروژه بالا :
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول