WPF アプリでビジュアルのアニメーションを処理する専用のスレッドを作成することはできますか? さらに説明すると、私のアプリでは、重いタスクが発生することがあります。これは、ビジュアルを動かす数学ベースのアニメーションに影響を与えます。
それで、これは可能ですか?専用スレッドを使用してアニメーションをスムーズに保つには?
編集
ビジュアルを移動する方法は次のとおりです。
public class KMouseGrid : Grid
{
private VisualCollection _children;
DrawingVisual DrawingVisual_0;
TranslateTransform _0_translate = new TranslateTransform(0, 0);
DrawingVisual DrawingVisual_1;
TranslateTransform _1_translate = new TranslateTransform(0, 0);
public KMouseGrid()
{
MultiInputWrapper.Instance.CoordinateRecieved += new MultiInput.Contracts.MultiInput(Instance_CoordinateRecievedSingleChannel);
_children.Add(DrawingVisual_0);
_children.Add(DrawingVisual_1);
}
void Instance_CoordinateRecievedMultiChannel(double aX, double aY, int aChanelNumber, MultiInput.Contracts.MouseEvents aMouseEvent)
{
if (aChanelNumber == 0)
{
_0_translate.X = MultiInput.MultiInputMouse.GetLastPosition(0).X ;
_0_translate.Y = MultiInput.MultiInputMouse.GetLastPosition(0).Y ;
//_0_rotate.Angle += 6;
}
else if (aChanelNumber == 1)
{
_1_translate.X = MultiInput.MultiInputMouse.GetLastPosition(1).X ;
_1_translate.Y = MultiInput.MultiInputMouse.GetLastPosition(1).Y ;
}
}
// Provide a required override for the VisualChildrenCount property.
protected override int VisualChildrenCount
{
get
{
if (_children == null)
{
_children = new VisualCollection(this);
}
return _children.Count;
}
}
// Provide a required override for the GetVisualChild method.
protected override Visual GetVisualChild(int index)
{
if (index < 0 || index >= _children.Count)
{
throw new ArgumentOutOfRangeException();
}
return _children[index];
}
private DrawingVisual CreateDrawingVisualCursor(ImageSource aImageSource, double aXOffset, double aYOffset)
{
DrawingVisual drawingVisual = new DrawingVisual();
// Retrieve the DrawingContext in order to create new drawing content.
DrawingContext drawingContext = drawingVisual.RenderOpen();
// Create a rectangle and draw it in the DrawingContext.
Rect rect = new Rect(new System.Windows.Point(aXOffset, aYOffset), new System.Windows.Size(aImageSource.Width, aImageSource.Height));
drawingContext.DrawImage(aImageSource, rect);
// Persist the drawing content.
drawingContext.Close();
return drawingVisual;
}