【发布时间】:2016-06-30 19:01:06
【问题描述】:
我有一个异步移动鼠标的程序。在我的程序中,可以通过按下按钮中止异步进程。
当用户移动鼠标而不是中止正在运行的异步进程时,如何捕获事件?当鼠标移出 wpf 控件时也是如此。
Xaml:
<Button Height="20" Width="40" Click="Button_Click" ></Button>
代码:
namespace WpfApplication2
{
public partial class MainWindow : Window
{
WorkWithMouse WWM = new WorkWithMouse();
public MainWindow()
{
InitializeComponent();
WWM.MouveMouseAsync();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
WWM.AbortMouseMove();
}
private void Window_MouseMove(object sender, MouseEventArgs e)
{
Console.WriteLine("Moving");
}
}
public class WorkWithMouse
{
CancellationTokenSource cancelTokenSource = new CancellationTokenSource();
[DllImport("User32.dll")]
private static extern bool SetCursorPos(int X, int Y);
public void AbortMouseMove()
{
cancelTokenSource.Cancel();
}
public void MouveMouseAsync()
{
Action<CancellationToken> task = new Action<CancellationToken>(MoveMouse);
IAsyncResult result = task.BeginInvoke(cancelTokenSource.Token, null, null);
}
private void MoveMouse(CancellationToken token)
{
int i = 100;
while (!token.IsCancellationRequested)
{
System.Threading.Thread.Sleep(2000);
SetCursorPos(i, 100);
i = i + 1;
}
}
}
【问题讨论】:
标签: c# wpf mouseevent