小编akj*_*shi的帖子

C#没有捕获来自非托管C++ DLL的未处理异常

我有一个从C#应用程序调用的非托管C++ DLL,我试图让C#应用程序捕获所有异常,以便在由于非托管异常导致dll失败的情况下,用户将得到一个半合适的错误消息(C#app是一个实现它自己的http处理程序的Web服务).

我遇到的问题是并非所有类型都被捕获.因此,如果我创建以下内容并执行C#应用程序,则dll会抛出错误并终止整个应用程序.有任何想法吗?

这是在VS2005中使用.Net framework v2创建的

C++ - Test.h

#ifndef INC_TEST_H
#define INC_TEST_H

extern "C" __declspec(dllexport) void ProcessBadCall();

#endif
Run Code Online (Sandbox Code Playgroud)

C++ - Test.cpp

#include <iostream>
#include <vector>

using namespace std;

void ProcessBadCall()
{
  vector<int> myValues;
  int a = myValues[1];
  cout << a << endl;
}
Run Code Online (Sandbox Code Playgroud)

C# - Program.cs

class Program
{
  [DllImport("Test.dll", EntryPoint="ProcessBadCall")]
  static extern void ProcessBadCall();

  static void Main(string[] args)
  {
    try
    {
      ProcessBadCall();
    }
    catch (SEHException ex)
    {
      Console.WriteLine("SEH Exception: {0}", ex.Message);
    }
    catch (Exception ex)
    {
      Console.WriteLine("Exception: {0}", …
Run Code Online (Sandbox Code Playgroud)

c# c++ dll pinvoke exception-handling

16
推荐指数
1
解决办法
1万
查看次数

在CollectionChanged事件期间无法更改ObservableCollection

我有一个CollectionChanged与之相关的事件ObservableCollection.CollectionChanged然后,此事件调用另一个函数,该函数旨在使用原始集合中的项更新另一个集合(相同类型).我已经阅读了" 在CollectionChanged事件期间无法更改ObservableCollection "的其他帖子,我完全理解为什么修改CollectionChanged事件内部的集合以及为什么这会导致循环引用...但在这种特殊情况下我没有修改原始集合,我只是将一个项目添加到一个不相关的集合中.

所以对我的问题......我在做什么有什么不对吗?我没有看到如何将集合中的项目与绑定到另一个集合的事件相关联,然后再次触发事件并创建循环引用(尽管请告诉我,如果我错了).

还有...周围有什么办法吗?我读了几篇帖子,建议在一个单独的线程上运行它,但是当我尝试时,我得到了以下错误.

This type of CollectionView does not support changes to its SourceCollection
from a thread different from the Dispatcher thread.
Run Code Online (Sandbox Code Playgroud)

我真的只是在更好地了解这里发生的事情之后.任何建议将不胜感激.

编辑

请求的简化示例

void originalCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    update(originalCollection);
}

private void update(object parameter)
{
    foreach (var originalCollectionItem in parameter)
        newCollection.Add(originalCollectionItem);
}
Run Code Online (Sandbox Code Playgroud)

.net c# observablecollection

16
推荐指数
1
解决办法
9352
查看次数

将焦点移动到输入键上的下一个单元格按WPF DataGrid?

我想要一个可以的Custom DataGrid,

  1. Enter如果处于编辑模式,也会在按下键时移动到下一个单元格.
  2. 当达到当前行中的最后一列时,焦点应移动到下一行的第一个单元格.
  3. 在到达下一个单元格时,如果单元格是可编辑的,它应该自动变为可编辑.
  4. 如果单元格包含ComboBox非组合框,则组合框应该是DropDownOpen.

请帮帮我.我在过去的几天里一直在尝试创建一个Custom DataGrid并编写了一些代码

protected override void OnPreviewKeyDown(System.Windows.Input.KeyEventArgs e)
Run Code Online (Sandbox Code Playgroud)

但我失败了.

c# wpf mvvm wpfdatagrid

15
推荐指数
3
解决办法
2万
查看次数

Resharper热键

我刚刚开始使用resharper,我正在尝试学习所有热键 - 是否有标准安装的所有热键列表?这可能是可打印的格式.

resharper keyboard-shortcuts hotkeys

14
推荐指数
1
解决办法
9213
查看次数

WPF DataGrid:重新排序行?

我正在创建一个WPF数据网格,我希望能够通过拖放重新排序行,如下所示:我单击一行并向上或向下拖动它.像我一样,如果我释放鼠标,标记会显示行将被丢弃的位置.当我释放鼠标时,拖动的行将插入标记指示的位置.

有没有人看到任何文章或博客文章,说明如何做到这一点?如果我不需要,我不想重新发明轮子,谷歌也没有发现任何东西.谢谢.

.net wpf datagrid drag-and-drop wpfdatagrid

14
推荐指数
2
解决办法
1万
查看次数

对ObservableCollection进行排序

假设我有ObservableCollection员工类

public ObservableCollection<Employee> employeeCollection = new ObservableCollection<Employee>();

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public double MobileNumber { get; set; }
    public string City { get; set; }
    public int Age { get; set; }

    public Employee() {}
}
Run Code Online (Sandbox Code Playgroud)

现在我试图ObservableCollection通过用户从组合框中进行适当的选择来对("employeeCollection")进行排序[它将... ...排序FirstName ... .Sort By MobileNumber等...]

并且需要返回已排序的可观察集合.... 意味着它不应该是"var"的形式 ObservableCollection<Employee>

所以我可以将它归还给...的“ItemsSource”财产“ItemsControl”

谢谢……

.net c# sorting wpf observablecollection

14
推荐指数
1
解决办法
1万
查看次数

从隐藏到折叠的可见性中的动画,反之亦然

我试图实现类似于iPhone消息视图的东西.在按钮上单击,删除按钮将滑出每个消息,单击"完成"删除按钮将滑入.我已经能够使用mvvm实现,除了滑动效果.这是我用我有限的知识写的风格:

<Style TargetType="Border">
    <Style.Triggers>
        <DataTrigger Binding="{Binding ShowDeleteButton}" Value="false">
            <Setter Property="Visibility" Value="Collapsed"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

这里"ShowDeleteButton"是视图模型中的bool属性.这很好用.但是崩溃和"变得可见"正在突然而且非常快地发生.我需要一些滑动动画.请注意,当删除按钮消失时,其余控件应占用剩余空间,并且当按钮出现时,现有控件应缩小并为按钮提供空间.我试过故事板动画,但即使几个小时后我也无法弄清楚它投掷的奇怪错误.这是代码:

<DataTrigger Binding="{Binding ShowDeleteButton}" Value="false">
     <DataTrigger.EnterActions>
          <BeginStoryboard>
               <Storyboard BeginTime="0:0:1">
                  <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visiblity">
                     <DiscreteObjectKeyFrame Value="{x:Static Visibility.Collapsed}" />
                  </ObjectAnimationUsingKeyFrames>
                </Storyboard>
           </BeginStoryboard>
      </DataTrigger.EnterActions>
      <DataTrigger.ExitActions>
            <BeginStoryboard>
               <Storyboard BeginTime="0:0:1">
                 <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visiblity">
                     <DiscreteObjectKeyFrame Value="{x:Static Visibility.Visible}" />
                 </ObjectAnimationUsingKeyFrames>
               </Storyboard>
            </BeginStoryboard>
      </DataTrigger.ExitActions>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)

有人可以帮助陷入困境的灵魂吗?

问候

wpf animation styles mvvm

14
推荐指数
1
解决办法
2万
查看次数

获取ListView可见项目

我有一个ListView可能包含很多物品,所以它是virtualized和回收物品.它不使用排序.我需要刷新一些值显示,但是当项目太多时,更新所有内容的速度太慢,所以我只想刷新可见项目.

我怎样才能获得所有当前显示的项目列表?我试图调查ListView或者在里面ScrollViewer,但我仍然不知道如何实现这一目标.如果可以看到解决方案,解决方案不得通过所有项目进行测试,因为这样做太慢了.

我不确定代码或xaml是否有用,它只是一个Virtualized/ Recycling ListViewItemSource与一个绑定Array.

编辑: 答案:
感谢akjoshi,我找到了方法:

  • 得到ScrollViewerListView (有FindDescendant方法,你可以做你自己用VisualTreeHelper).

  • 读取它ScrollViewer.VerticalOffset:它是显示的第一个项目的编号

  • 读它ScrollViewer.ViewportHeight:它是显示的项目数.
    Rq:CanContentScroll必须是真的.

.net c# vb.net wpf listview

14
推荐指数
2
解决办法
3万
查看次数

推荐的WPF项目结构?

我是一个很好的Visual Studio解决方案和项目结构的坚持者.

我即将开始WPF概念证明工作.

任何人都可以推荐一些他们使用过的WPF项目结构并且发现效果很好吗?

这里http://drwpf.com/blog/2007/10/01/58/

他们有一个我喜欢的建议:

    Root
    - Pages
    - Controls
    - Resources
    App.xaml
Run Code Online (Sandbox Code Playgroud)

页面,控件和资源是文件夹.

有没有人发现某些结构运作良好/不能正常工作?

此外,如果你们这样做,我宁愿不进入"模型视图演示者"讨论.

.net wpf project-planning project-structure mvvm

13
推荐指数
2
解决办法
1万
查看次数

DataGrid SortDirection被忽略

我想在启动时指定默认顺序,但仍然允许用户通过单击列标题进行排序.遗憾的是,SortDirection属性在设置时被忽略 - 即我们得到正确的列标题箭头,但没有任何排序.

手动单击标题,可以正确排序数据,因此不是排序本身.这是我正在使用的简化版本:

<DataGrid ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=CurrentView}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Header 1" Binding="{Binding ApplicationName}"/>
        <DataGridTextColumn Header="Header 2" 
               Binding="{Binding TotalTime}" SortDirection="Descending"/>
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

更新:我还尝试按照建议将SortDescriptions添加到ICollectionView,但没有很好的结果.这可能与我正在动态地向集合中添加新项目这一事实有关吗?即在启动时列表是空的并且慢慢填充,也许排序描述只应用一次?

c# wpf xaml datagrid sortdirection

13
推荐指数
1
解决办法
7587
查看次数