在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等效?
我有以下问题:
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(), 是this指ParentClass或ChildClass?
在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必须是最终的技术原因是什么?
我有以下方法:
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 是一个包含所有值的数组!
我在这里失踪了什么?
我有以下javascript:
$(document).ready(function () {
...
$("#mySelector").ready(function () {
window.alert('What the hell!!!');
});
});
Run Code Online (Sandbox Code Playgroud)
我希望每次mySelector出现在文档中的某个位置时都会出现弹出窗口.
我现在面临的问题是这个代码正在运行(我得到一个弹出窗口),即使文档中不存在选择器.
为什么会这样?
我正在尝试构建一个像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) 我正在尝试使用以下方法加载和播放波形文件:
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不支持包装或有什么我不这样做是否正确?
我有一个内部类A,做了很多的东西,我有一组其他类的B,D,E从类继承A.当然这不会起作用,因为编译器会抱怨公共类无法扩展内部类(请参阅此解释).
我不想A公开,因为我不希望我的用户继承它.我希望他们只使用B,D,E.
我知道我可以使用Intellisense隐藏类,[EditorBrowsable(EditorBrowsableState.Never)]但用户仍然可以使用反射访问它:(
有没有办法实现这个目标?
我有以下代码:
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.Nodes与NullPointerExceptionif 崩溃_kids == null
我希望这个方法能够在前提条件下返回,_kids == null但事实并非如此!
题
为什么方法开头的前提条件没有效果?
可能重复:
在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#框架的一部分,以便用户能够在我的应用程序中注册.我不希望用户扩展我的课程,所以我标记了它sealed.现在我有一些用户报告他们在该类中看到的方法多于我提供的方法.经过一些调查后,似乎这些用户已经定义了(通过intellisense)显示的扩展方法,就像它们是在我的公共密封类中定义的一样.
问题 有没有办法可以禁止用户在我的公共密封类上定义扩展方法?
在我的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# ×9
wpf ×3
ienumerable ×2
java ×2
yield-return ×2
binding ×1
css ×1
css3 ×1
foreach ×1
iterator ×1
javascript ×1
jquery ×1
soundplayer ×1
var ×1
yield ×1