小编GET*_*Tah的帖子

WPF中的SwingUtilities.invokeLater等价物

在WPF UI元素中,只允许在UI调度程序线程上进行更新.因此,尝试从单独的线程更新UI元素将最终出现异常.我在网上找到解决这个问题的唯一方法就是:

ThreadStart start = delegate(){
    Dispatcher.Invoke(DispatcherPriority.Normal, new Action...
};
new Thread(start).Start();
Run Code Online (Sandbox Code Playgroud)

Java有SwingUtilities.invokeLater方法来做同样的事情.

我的问题是:是否有一个专门的WPF实用程序类与Java SWING SwingUtilities.invokeLater等效?

c# java wpf

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

在对象初始值设定项中使用“this”

我有以下问题:

public class ChildClass{
   public Object Parent = null;
}
public class ParentClass{
   public ChildClass CreateChild(){
        return new ChildClass{ Parent = this; }
   }
}
Run Code Online (Sandbox Code Playgroud)

我在理解对象初始值设定项时遇到了一些困难。方法中CreateChild(), 是thisParentClassChildClass

c# initialization

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

变量应该是最终的内部监听器

可能重复:
不能引用在不同方法中定义的内部类中的非final变量
为什么在匿名类中只能访问最终变量?

在SO和谷歌寻找这个问题的答案,但找不到任何答案.

我有以下代码:

MyClass variable = new MyClass();
Button b = new Button();
b.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e){
         System.out.println("You clicked the button");
         variable.doSomething();
   }
});
Run Code Online (Sandbox Code Playgroud)

编译器返回:

从内部类中访问局部变量变量; 需要宣布最终

什么variable必须是最终的技术原因是什么?

java

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

foreach循环中奇怪的IEnumerable行为

我有以下方法:

public IEnumerable<object> GetParameters(Context context)
{
    yield return new[] { 1, 2, 3 };
}
Run Code Online (Sandbox Code Playgroud)

当我遍历此枚举时:

foreach (var parameter in GetParameters())
{
    // Do something here with parameter
}
Run Code Online (Sandbox Code Playgroud)

我希望参数1在第一个循环,2在第二个和3第三个,但事实并非如此:(

在此输入图像描述

parameter 是一个包含所有值的数组!

我在这里失踪了什么?

c# ienumerable foreach iterator yield-return

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

即使文档中不存在ID,也会调用函数

我有以下javascript:

 $(document).ready(function () {
    ...
    $("#mySelector").ready(function () {
        window.alert('What the hell!!!');
    });
 });
Run Code Online (Sandbox Code Playgroud)

我希望每次mySelector出现在文档中的某个位置时都会出现弹出窗口.

我现在面临的问题是这个代码正在运行(我得到一个弹出窗口),即使文档中不存在选择器.

为什么会这样?

javascript jquery asp.net-mvc-3

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

导航栏中的水平列表项

我正在尝试构建一个像Github一样的导航栏(不使用Bootstrap nav*选择器 - 请看这个jsfiddle 在此输入图像描述

所以我有以下HTML:

<div class="container" style="margin-top: 20px;">
    <div class="span9">
        <ul class="unstyled main-tabs">
            <li>
                <a href="#">Link1</a>
            </li>
            <li>
                <a href="#">Link2</a>
            </li>
            <li>
                <a href="#">Link3</a>
            </li>
        </ul>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

请注意span9我用来强制导航栏只占据屏幕9/12的类.

以下CSS:

.main-tabs {
    position: relative;
    margin-bottom: 20px;
    font-size: 12px;
    font-weight: bold;
    background-color: #eaeaea;
    background-image: -moz-linear-gradient(#fafafa, #eaeaea);
    background-image: -webkit-linear-gradient(#fafafa, #eaeaea);
    background-image: linear-gradient(#fafafa, #eaeaea);
    background-repeat: repeat-x;
    border: 1px solid #eaeaea;
    border-bottom-color: #cacaca;
    border-radius: 3px;
}

.main-tabs a {
    display: block;
    text-align: center;
    line-height: 35px;
    font-size: 12px;
    color: #777; …
Run Code Online (Sandbox Code Playgroud)

css css3 responsive-design

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

不支持 URI 前缀

我正在尝试使用以下方法加载和播放波形文件:

SoundPlayer simpleSound = new SoundPlayer(@"pack://application:,,,/MyAssembly;component/Sounds/10meters.wav");
            simpleSound.Play();
Run Code Online (Sandbox Code Playgroud)

没有成功。我得到一个System.NotSupportedException:(见下文。

System.NotSupportedException: The URI prefix is not recognized.
   at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
   at System.Net.WebRequest.Create(Uri requestUri)
   at System.Media.SoundPlayer.LoadSync()
   at System.Media.SoundPlayer.LoadAndPlay(Int32 flags)
   at System.Media.SoundPlayer.Play()
Run Code Online (Sandbox Code Playgroud)

我查看了谷歌并试图找到解决方案,但没有任何效果。使用直接路径播放文件工作正常

SoundPlayer simpleSound = new SoundPlayer(@"D:\Projects\MyAssembly\Sounds\10meters.wav");
simpleSound.Play();
Run Code Online (Sandbox Code Playgroud)

我还检查了 MyAssembly 内容,资源在那里。难道SoundPlayer不支持包装或有什么我不这样做是否正确?

c# wpf soundplayer

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

公共类扩展了内部类

我有一个内部类A,做了很多的东西,我有一组其他类的B,D,E从类继承A.当然这不会起作用,因为编译器会抱怨公共类无法扩展内部类(请参阅解释).

我不想A公开,因为我不希望我的用户继承它.我希望他们只使用B,D,E.

我知道我可以使用Intellisense隐藏类,[EditorBrowsable(EditorBrowsableState.Never)]但用户仍然可以使用反射访问它:(

有没有办法实现这个目标?

c#

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

屈服回归奇怪的行为

我有以下代码:

virtual public IEnumerable<string> GetSelectedIds(){
   if (_kids == null)
        yield return null;
   foreach (var current in _kids.Nodes)
        yield return current;
}
Run Code Online (Sandbox Code Playgroud)

这段代码_kids.NodesNullPointerExceptionif 崩溃_kids == null

我希望这个方法能够在前提条件下返回,_kids == null但事实并非如此!

为什么方法开头的前提条件没有效果?

c# ienumerable yield yield-return

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

隐式类型变量

可能重复:
在C#中使用var关键字

对于C#来说比较新,我想知道MS必须引入var隐式类型变量的动机.文件说:

隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定了类型.

进一步说:

在许多情况下,var的使用是可选的,只是语法上的便利

这一切都很好,但在我看来,这只会引起混乱.

假设你正在审查这个for循环.

foreach (var item in custQuery){
    // A bench of code...
}
Run Code Online (Sandbox Code Playgroud)

而不是审查循环的内容和语义,我会花费宝贵的时间来寻找项目的类型!我宁愿选择以下内容:

foreach (String item in custQuery){
    // A bench of code...
}
Run Code Online (Sandbox Code Playgroud)

问题是:我读到隐式类型变量在处理LINQ时有帮助,是否真的有助于在其他场景中使用它?

c# var implicit-conversion

0
推荐指数
1
解决办法
1006
查看次数

禁止扩展方法

我正在发布一个公共类作为我的C#框架的一部分,以便用户能够在我的应用程序中注册.我不希望用户扩展我的课程,所以我标记了它sealed.现在我有一些用户报告他们在该类中看到的方法多于我提供的方法.经过一些调查后,似乎这些用户已经定义了(通过intellisense)显示的扩展方法,就像它们是在我的公共密封类中定义的一样.

问题 有没有办法可以禁止用户在我的公共密封类上定义扩展方法?

c#

0
推荐指数
1
解决办法
213
查看次数

WPF绑定未更新

在我的View模型中,我有以下属性:

public Visibility IsModelBusy { get; set; }
Run Code Online (Sandbox Code Playgroud)

我有一个很长的处理任务:

private void DoSomething(object obj)
{
    IsModelBusy = Visibility.Visible;
    OnPropertyChanged("IsModelBusy"); 
    DoHeavyWork();
    IsModelBusy = Visibility.Collapsed;
    OnPropertyChanged("IsModelBusy");
}
Run Code Online (Sandbox Code Playgroud)

我有一个绑定到的UI元素IsModelBusy:

<Border Visibility="{Binding IsModelBusy, UpdateSourceTrigger=PropertyChanged}">
...
</Border>
Run Code Online (Sandbox Code Playgroud)

问题 我的边框永远不可见,主窗口挂起,而繁重的任务正在进行中(我无法在后台线程中运行)我尝试在传递给调度程序的操作中包装属性更改调用,没有运气,问题仍然存在仍然存在.

现在,如果我这样做:

private void DoSomething(object obj)
{
    IsModelBusy = Visibility.Visible;
    OnPropertyChanged("IsModelBusy"); 
    MessageBox.Show("What the...");  <=========
    DoHeavyWork();
    IsModelBusy = Visibility.Collapsed;
    OnPropertyChanged("IsModelBusy");
}
Run Code Online (Sandbox Code Playgroud)

随着介绍MessageBox,UI似乎处理属性更改事件并正确更新.

问题 如果不使用后台任务,我如何强制UI处理PropertyChanged事件?

c# wpf binding

-1
推荐指数
1
解决办法
508
查看次数