0

既存のポリゴン描画の再描画機能用のスレッドを生成しようとしています。私はここで、スレッドで UI を実現できる可能性があることを読みました。リンクを参照してください。しかし、redrawSingelPoly() 関数では使用できません。

私のMainWindow.xaml.csでは:

ユーザーがメイン ウィンドウのボタンを押すと呼び出されます。

    private void SingleSelectedMeasurement(object sender, RoutedEventArgs e)
    {
        System.Windows.Controls.Button button = (System.Windows.Controls.Button)sender;
        RedrawSingelMeasurement(Convert.ToInt16(button.Tag));
    }

    private void RedrawSingelMeasurement(int selectedMeasurement)
    {
        selectedMeasurement = selectedMeasurement - 1;

        for (int i = 0; i < measurements.Length; i++)
        {
            if (selectedMeasurement != i) 
            {
                measurements[i].draw = false; //block drawing
            }
            else
            {
                measurements[i].draw = true; // remove block for drawing
            }
        }
            measurements[selectedMeasurement].redrawSingelPoly(); 
    }

私の Measurement.cs では:

    public void redrawSingelPoly() 
    {
        Polyline poly = new Polyline();
        poly.Stroke = colorBrush; 
        poly.StrokeThickness = basicLineThick;

        //first clean all
        coordinateSystem.Children.Clear(); 

        poly.Points = points;
        //draw
        coordinateSystem.Children.Add(poly);
    }
4

4 に答える 4

0
private void SingleSelectedMeasurement(object sender, RoutedEventArgs e)
{
    var button = (System.Windows.Controls.Button)sender;

    Task.Factory.StartNew (
       () => OnUi(RedrawSingelMeasurement(Convert.ToInt16(button.Tag))));        
}

//here's a sample on how to get despatcher for the ui thread
private void OnUi (Action action)
    {
        if (_dispatchService == null) 
            _dispatchService = ServiceLocator.Current.GetInstance<IDispatchService>();
            //or _dispatchService  = Application.Current.Dispatcher - whatever is suitable

        if (_dispatchService.CheckAccess())
            action.Invoke ();
        else
            _dispatchService.Invoke(action);
    }
于 2013-06-25T18:14:38.133 に答える
0

あなたが言及した記事は、実際にはウィンドウごとに1つのスレッドを持つだけです。別のスレッドで専用の要素を描画することはできません。

于 2013-06-25T17:33:32.933 に答える
0

理想的には、1 つのウィンドウのみを 1 つの Dispatcher で実行できますが、HostVisual によって異なるビジュアルを異なるスレッドに配置できますが、シナリオは非常に限られています。たぶん、この記事はあなたを助けることができます:

http://blogs.msdn.com/b/dwayneneed/archive/2007/04/26/multithreaded-ui-hostvisual.aspx

于 2013-06-25T17:28:19.270 に答える