Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 拖放时,gui冻结_C#_Wpf_Drag And Drop - Fatal编程技术网

C# 拖放时,gui冻结

C# 拖放时,gui冻结,c#,wpf,drag-and-drop,C#,Wpf,Drag And Drop,我有一个材料设计的拖放弹出框。拖放完成后,gui将冻结,并且不断更新的数据不会刷新。我怎样才能解决这个问题?在单独的线程中运行是错误的吗?是否有一点被忽略了?还是一切都错了 我的鼠标密码 private void PortableButton_MouseUp(object sender, MouseButtonEventArgs e) { ThreadPool.QueueUserWorkItem(state => { PortableButt

我有一个材料设计的拖放弹出框。拖放完成后,gui将冻结,并且不断更新的数据不会刷新。我怎样才能解决这个问题?在单独的线程中运行是错误的吗?是否有一点被忽略了?还是一切都错了

我的鼠标密码

private void PortableButton_MouseUp(object sender, MouseButtonEventArgs e)
    {
        ThreadPool.QueueUserWorkItem(state => {
            PortableButton.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
        {
            e.MouseDevice.Capture(null);
        }));
        });
    }
鼠标移动代码

private  void PortableButton_MouseMove(object sender, MouseEventArgs e)
    {
        ThreadPool.QueueUserWorkItem(state => {
           
        var ActuelHeight = MainBorder.ActualHeight;
        var ActuelWidth = MainBorder.ActualWidth;
        PortableButton.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
        {
            int _tempX = Convert.ToInt32(e.GetPosition(this).X);
            int _tempY = Convert.ToInt32(e.GetPosition(this).Y);

            if (_tempX < ActuelWidth && _tempX > 0 && _tempY < ActuelHeight && _tempY > 0)
            {

                if (e.LeftButton == MouseButtonState.Pressed)
                {
                
                    e.MouseDevice.Capture(PortableButton);
                    System.Windows.Thickness _margin = new System.Windows.Thickness();


                    _margin = MainGrid.Margin;
                
                    if (m_MouseX < _tempX)
                    {
                    
                        _margin.Left += (_tempX - m_MouseX);
                   
                        _margin.Right -= (_tempX - m_MouseX);
                    }
                    else
                    {
                        _margin.Left -= (m_MouseX - _tempX);
                        _margin.Right -= (_tempX - m_MouseX);
                    }
                    if (m_MouseY < _tempY)
                    {
                        _margin.Top += (_tempY - m_MouseY);
                        _margin.Bottom -= (_tempY - m_MouseY);
                    }
                    else
                    {
                        _margin.Top -= (m_MouseY - _tempY);
                        _margin.Bottom -= (_tempY - m_MouseY);
                    }
                    MainGrid.Margin = _margin;
                    m_MouseX = _tempX;
                    m_MouseY = _tempY;
                }
            }
                }));
        });

    }
Xaml代码

<Grid Name="MainGrid" Margin="96,308,156,0" VerticalAlignment="Top" Height="65" >
                    <materialDesign:PopupBox MouseUp="PortableButton_MouseUp" MouseLeftButtonUp="PortableButton_MouseLeftButtonUp" MouseMove="PortableButton_MouseMove" Name="PortableButton" Style="{StaticResource MaterialDesignMultiFloatingActionPopupBox}" 
                                         PlacementMode="BottomAndAlignCentres" ToolTipService.Placement="Right"
                                             materialDesign:ShadowAssist.ShadowDepth="Depth3"
                                         ToolTip="Menü">
                        <StackPanel>
                            <Button Name="SystemButton" ToolTip="System" PreviewMouseLeftButtonDown="SystemButton_PreviewMouseLeftButtonDown">
                                <Image  Source="/Images/Icons/systemIcon.png" Width="45" ></Image>
                            </Button>
                            <Button Name="TestButton" ToolTip="Test" PreviewMouseLeftButtonDown ="TestButton_PreviewMouseLeftButtonDown">
                                <Image Source="/Images/Icons/testIcon.png" Width="30"></Image>
                            </Button>
                            <Button Name="PosButton" ToolTip="Pos" PreviewMouseLeftButtonDown ="PosClick">
                                <Image Source="/Images/Icons/positionIcon.png" Width="30"></Image>
                            </Button>
                        </StackPanel>
                    </materialDesign:PopupBox>
                </Grid>


我添加了xaml代码。屏幕上不断刷新数据。我用一个带有串口的特殊协议得到这些。由于这将是一个很长的代码,可以尝试使用计时器中计数的for循环。

您可以添加您的XAML和其他相关内容,以便我可以重现您的问题吗?我添加XAML代码。屏幕上不断刷新数据。我用一个带有串口的特殊协议得到这些。因为这将是一个很长的代码,所以可以尝试使用计时器中计数的for循环。
<Grid Name="MainGrid" Margin="96,308,156,0" VerticalAlignment="Top" Height="65" >
                    <materialDesign:PopupBox MouseUp="PortableButton_MouseUp" MouseLeftButtonUp="PortableButton_MouseLeftButtonUp" MouseMove="PortableButton_MouseMove" Name="PortableButton" Style="{StaticResource MaterialDesignMultiFloatingActionPopupBox}" 
                                         PlacementMode="BottomAndAlignCentres" ToolTipService.Placement="Right"
                                             materialDesign:ShadowAssist.ShadowDepth="Depth3"
                                         ToolTip="Menü">
                        <StackPanel>
                            <Button Name="SystemButton" ToolTip="System" PreviewMouseLeftButtonDown="SystemButton_PreviewMouseLeftButtonDown">
                                <Image  Source="/Images/Icons/systemIcon.png" Width="45" ></Image>
                            </Button>
                            <Button Name="TestButton" ToolTip="Test" PreviewMouseLeftButtonDown ="TestButton_PreviewMouseLeftButtonDown">
                                <Image Source="/Images/Icons/testIcon.png" Width="30"></Image>
                            </Button>
                            <Button Name="PosButton" ToolTip="Pos" PreviewMouseLeftButtonDown ="PosClick">
                                <Image Source="/Images/Icons/positionIcon.png" Width="30"></Image>
                            </Button>
                        </StackPanel>
                    </materialDesign:PopupBox>
                </Grid>