小编Ada*_*lls的帖子

Linq其中值在Array中

IEnumerable<string> periods = new string[] {"ABC", "JKD", "223A"};

var someData = from p in returns  
               from d in p.ReturnDet  
               where p.Year > 2009 
               where d.Period <is in periods array> 
Run Code Online (Sandbox Code Playgroud)

如何选择句点数组中包含d.periods的值?

c# linq

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

简单的WPF示例导致不受控制的内存增长

我已经将我在其中一个应用程序中看到的一个问题归结为一个非常简单的复制样本.我需要知道是否有什么不对劲或我遗漏的东西.

无论如何,下面是代码.行为是代码在内存中运行并稳定增长,直到它与OutOfMemoryException崩溃.这需要一段时间,但行为是对象被分配,而不是垃圾收集.

我已经采取内存转储并运行!gcroot对某些事情以及使用ANTS来弄清楚问题是什么,但我已经有一段时间了,需要一些新的眼睛.

此复制示例是一个简单的控制台应用程序,可创建Canvas并为其添加一行.它不断地这样做.这就是所有的代码.它不时地睡觉,以确保CPU不会因为你的系统没有响应而被征税(并且确保GC无法运行并不奇怪).

有人有什么想法?我已经尝试过仅使用.NET 3.0,.NET 3.5以及.NET 3.5 SP1,并且在所有三种环境中都会出现相同的行为.

另请注意,我已将此代码放在WPF应用程序项目中,并通过单击按钮触发代码,它也会出现在那里.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows.Shapes;
using System.Windows;

namespace SimplestReproSample
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            long count = 0;
            while (true)
            {
                if (count++ % 100 == 0)
                {
                    // sleep for a while to ensure we aren't using up the whole CPU
                    System.Threading.Thread.Sleep(50);
                }
                BuildCanvas();
            }
        }

        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
        private static void BuildCanvas()
        {
            Canvas c = new Canvas(); …

c# wpf memory-leaks

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

C#标签文本未更新

我有以下代码:

private void button1_Click(object sender, EventArgs e)
{
  var answer =
    MessageBox.Show(
      "Do you wish to submit checked items to the ACH bank? \r\n\r\nOnly the items that are checked and have the status 'Entered' will be submitted.",
      "Submit",
      MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,
      MessageBoxDefaultButton.Button1);

  if (answer != DialogResult.Yes)
    return;

  button1.Enabled = false;
  progressBar1.Maximum = dataGridView1.Rows.Count;
  progressBar1.Minimum = 0;
  progressBar1.Value = 0;
  progressBar1.Step = 1;

  foreach (DataGridViewRow row in dataGridView1.Rows)
  {
    if ((string) row.Cells["Status"].Value == "Entered")
    {
      progressBar1.PerformStep();

      label_Message.Text = @"Sending " + row.Cells["Name"].Value …
Run Code Online (Sandbox Code Playgroud)

c# label sleep winforms

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

在WPF中,如何在具有焦点的窗口部分周围放置边框?

我有一个有两个主要区域的窗口.一个是ScrollViewer内部的TextBox,另一个是TabControl.我想在当前具有焦点的部分周围有一个红色边框,所以我编写了以下代码来做到这一点

XAML

<ScrollViewer BorderBrush="Red" 
              BorderThickness="0"
              GotFocus="Border_GotFocus"  
              LostFocus="Border_LostFocus">
    <TextBox/>
</ScrollViewer>
<TabControl BorderBrush="Red" 
            BorderThickness="0"
            GotFocus="Border_GotFocus"  
            LostFocus="Border_LostFocus">
</TabControl>
Run Code Online (Sandbox Code Playgroud)

private void Border_LostFocus(object sender, RoutedEventArgs e)
{
    var control = sender as Control;
    if (control != null)
    {
        control.BorderThickness = new Thickness(0);
    }
}

private void Border_GotFocus(object sender, RoutedEventArgs e)
{
    var control = sender as Control;
    if (control != null)
    {
        control.BorderThickness = new Thickness(2);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我单击TextBox,它不会更新ScrollViewer周围的边框.如果我单击TabControl中的Tab,它会更新边框,以便我可以看到边框,但是当我点击其他地方时不会"删除"它.有没有更好的方法来做到这一点?

wpf focus border

4
推荐指数
1
解决办法
1787
查看次数

如何从Observable Collection中删除项目

我为小说道歉,但我想解释到目前为止我所做的一切.

在我当前的项目中,我有一个应用程序,它使用一个提供集合的服务<List>.由于我在应用程序中使用此数据的方式,我不得不将此数据转换为可观察的集合.这样做是为了在选择和移动应用程序UI时,使用INotifyPropertyChanged和INotifyCollectionChanged刷新更新.

我现在面临挑战的地方是我有一个列表框,它与列表框中的可观察集合绑定,我有一个数据窗口,用于呈现集合的项目.此数据模板包含一个按钮,该按钮需要允许用户单击每个项目的按钮以将其从集合中删除.用例是一个列表框,用于存储从gridview中选择的所选名称.一旦用户从gridview中选择了名称,它们就会被存储(在可观察集合中作为队列),并在显示所有选定名称的列表框控件中在UI中呈现.我需要为用户提供以所选的任何顺序删除这些名称的功能.

从我读过的内容来看,没有办法枚举/索引一个可观察的集合.对于这种情况,您应该使用List或Array.但是,为了在列表视图中刷新项目,它们需要位于Observable Collection中.从我所看到的内容看来,当事件被触发时,我需要将可观察集合转换为数组,然后评估数组以确定索引,然后相应地删除记录?

我想我可能不在此基础上,因为我似乎已经过度设计这个问题了?上面的场景看起来不正确是因为我摔倒了好像我正在进行大量的转换和收集来删除记录?当集合作为列表框中的项目控件呈现时,有没有人知道从集合中删除记录(以任何顺序选择)的有效方法?我已成功删除使用RemoveAt()添加到集合中的最后一条记录但是我没有成功随机删除记录.

事后补充:这个问题的一部分可能与我在datatemplate(控制项)中插入一个按钮的事实有关,因此在按钮事件触发事件之前实际上没有选择该项?很抱歉这是漫无目的,但我已经在这里呆了好几个小时,并取得了一些小小的进展.任何提示或想法将不胜感激!

collections wpf observablecollection

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