Hi there,
I am currently having troubles with RoutedEvent in WPF. I made a simple example only using native WPF components. The example is made of a button executing a long term synchronous task the first time it's hit and showing a message "Already executed" all other times.
What you have to do to reproduce my issue is to click the button once, and when the task is executing click a second time => After finishing the first task the second click event is going to trigger a second execution => "Already executed". I want to consume any user input during the execution before it triggers an event.
How could I do that ?
I am currently having troubles with RoutedEvent in WPF. I made a simple example only using native WPF components. The example is made of a button executing a long term synchronous task the first time it's hit and showing a message "Already executed" all other times.
What you have to do to reproduce my issue is to click the button once, and when the task is executing click a second time => After finishing the first task the second click event is going to trigger a second execution => "Already executed". I want to consume any user input during the execution before it triggers an event.
How could I do that ?
<
Window
x:Class
=
"TestDBConnection.MainWindow"
Title
=
"MainWindow"
Height
=
"350"
Width
=
"525"
>
<
Grid
>
<
Button
Name
=
"butt"
Height
=
"30"
Width
=
"150"
/>
<
Label
Visibility
=
"Collapsed"
Name
=
"label"
>Executing ... </
Label
>
</
Grid
>
</
Window
>
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Data;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Imaging;
using
System.Windows.Navigation;
using
System.Windows.Shapes;
using
System.Data.Objects;
namespace
TestDBConnection
{
/// <summary>
/// Logique d'interaction pour MainWindow.xaml
/// </summary>
public
partial
class
MainWindow : Window
{
public
MainWindow()
{
InitializeComponent();
var cmd =
new
MyCommand();
//butt.Command = cmd;
//butt.PreviewMouseDown += new MouseButtonEventHandler(butt_PreviewMouseDown);
butt.Click += butt_Click;
cmd.label = label;
cmd.bouton = butt;
}
void
butt_PreviewMouseDown(
object
sender, MouseButtonEventArgs e)
{
//label.Visibility = Visibility.Visible;
}
void
butt_Click(
object
sender, RoutedEventArgs e)
{
if
(executedAlready)
{
MessageBox.Show(
"Already Executed"
);
return
;
}
for
(
long
i = 0; i < 40000; i++)
{
for
(
long
j = 0; j < 40000; j++)
{
var a = i + j;
}
}
//label.Visibility = Visibility.Collapsed;
executedAlready =
true
;
}
private
bool
executedAlready;
}
public
class
MyCommand : ICommand
{
public
bool
CanExecute(
object
parameter)
{
return
true
;
}
public
event
EventHandler CanExecuteChanged;
public
void
Execute(
object
parameter)
{
if
(executedAlready)
{
MessageBox.Show(
"Already Executed"
);
return
;
}
for
(
long
i = 0; i < 40000; i++)
{
for
(
long
j = 0; j < 40000; j++)
{
var a = i + j;
}
}
executedAlready =
true
;
label.Visibility = Visibility.Collapsed;
}
public
Label label;
public
Button bouton;
public
Window window;
private
bool
executedAlready;
}
}