小编Geo*_*uer的帖子

在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke

我有一个类似于Greg D讨论的SafeInvoke Control扩展方法(减去IsHandleCreated检查).

我从System.Windows.Forms.Form以下地址调用它:

public void Show(string text) {
    label.SafeInvoke(()=>label.Text = text);
    this.Show();
    this.Refresh();
}
Run Code Online (Sandbox Code Playgroud)

有时(此调用可能来自各种线程),这会导致以下错误:

System.InvalidOperationException 发生了

Message="在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke."

Source="System.Windows.Forms"

StackTrace:
at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
at System.Windows.Forms.Control.Invoke(Delegate method)
at DriverInterface2.UI.WinForms.Dialogs.FormExtensions.SafeInvoke[T](T control, Action`1 action) 
in C:\code\DriverInterface2\DriverInterface2.UI.WinForms\Dialogs\FormExtensions.cs:line 16
Run Code Online (Sandbox Code Playgroud)

发生了什么,我该如何解决?我知道这不是形式创建的问题,因为有时它会工作一次并且下次失败,那么问题是什么呢?

PS.我真的很擅长WinForms,有没有人知道一系列很好的文章解释整个模型以及如何使用它?

multithreading winforms

76
推荐指数
4
解决办法
13万
查看次数

为什么我会在装饰师身上使用责任链?

我只是阅读了责任链模式,当我更喜欢使用装饰器时,我很难想象一个场景.

你怎么看?CoR是否有利基用途?

oop design-patterns decorator chain-of-responsibility

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

如何找到ManualResetEvent的状态?

我正在使用一个实例ManualResetEvent来控制对资源的线程访问,但我遇到了问题.有谁知道在调试对象的状态时我怎么能找到?

也就是说我想知道ManualResetEvent当前是否阻塞任何线程,甚至可能阻塞了多少线程以及它阻塞的线程.

.net multithreading locking

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

Windows更新后"命名空间'System.Web.Mvc'中不存在类型或命名空间名称'Html'"

我做了Windows更新,然后我的asp.net mvc 5应用程序将不再加载抱怨

CS0234: The type or namespace name 'Html' does not exist in the namespace 'System.Web.Mvc'
Run Code Online (Sandbox Code Playgroud)

表明我的观点web.config有错

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
        <add namespace="Ogre.Extensions" />
        <add namespace="Newtonsoft.Json"/>
      </namespaces>
    </pages>
  </system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)

现在这非常令人困惑.在我的项目本身,我可以看到Html命名空间,在ILSpy中打开我的程序集,我可以导航到绑定System.Web.Mvc,我也可以,并且融合日志没有显示任何可疑的绑定错误.

这就好像只是我的观点被绑定(成功)到旧版本的Mvc.为什么会发生这种情况?我该如何解决?

让我明确指出,没有配置甚至代码更改.这是我在IISExpress上的开发机器上的全部内容.它正在运行,我做了更新并重新启动,现在它不再运行了.

这是我最近安装的更新.我可以一个接一个地删除它们,但我想知道实际上出了什么问题,因为我觉得我错过了故事的一部分.

从更新安装

asp.net asp.net-mvc windows-update

66
推荐指数
4
解决办法
4万
查看次数

将最后一个弹性项目放在容器的末尾

此问题涉及具有完整css3支持的浏览器,包括flexbox.

我有一个Flex容器,里面有一些物品.他们都有理由灵活启动,但我希望最后一个 .end项目被证明是flex-end.有没有一个很好的方法来做到这一点,而无需修改HTML,也没有求助于绝对定位?

.container {
  display: flex;
  flex-direction: column;
  outline: 1px solid green;
  min-height: 400px;
  width: 100px;
  justify-content: flex-start;
}
p {
  height: 50px;
  background-color: blue;
  margin: 5px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <p></p>
  <p></p>
  <p></p>
  <p class="end"></p>
</div>
Run Code Online (Sandbox Code Playgroud)

css css3 flexbox

65
推荐指数
2
解决办法
6万
查看次数

mstest.exe在哪里?

我需要从命令行运行mstest - 这个exe位于世界的哪个位置?任何人都可以给我一个线索吗?

编辑:我只安装了Visual Studio 2010

.net testing mstest file-location

63
推荐指数
5
解决办法
4万
查看次数

xUnit.net - 在所有测试之前和之后运行一次代码

TL; DR - 我正在寻找xUnit相当于MSTest AssemblyInitialize(也就是我喜欢的ONE功能).

具体来说,我正在寻找它,因为我有一些Selenium冒烟测试,我希望能够在没有其他依赖项的情况下运行.我有一个Fixture,它将为我启动IisExpress并在处置时杀死它.但是在每次测试之前执行此操作会大大增加运行时间.

我想在测试开始时触发一次这个代码,并在最后处理它(关闭进程).我怎么能这样做呢?

即使我可以通过编程方式访问诸如"当前正在运行多少个测试"之类的东西,我也可以解决一些问题.

c# automated-tests xunit.net

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

如何清除对象的先前期望?

我想设置一个返回值

_stubRepository.Stub(Contains(null)).IgnoreArguments().Return(true);
Run Code Online (Sandbox Code Playgroud)

但是在特定测试中,覆盖该期望返回false.

就像是:

_stubRepository.ClearExpectations();  //<- this does not exist, I'm just making something up
_stubRepository.Stub(Contains(null)).IgnoreArguments().Return(false);
Run Code Online (Sandbox Code Playgroud)

注意,我不希望第二次调用时返回false,我想覆盖第一个期望.

这将有助于大大简化我的测试场景.

.net rhino-mocks

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

取消后如何继续事件传播?

当用户点击某个链接时,我想用确认对话框显示它们.如果他们点击"是",我想继续原始导航.一个问题:我的确认对话框是通过返回一个jQuery.Deferred对象实现的,该对象仅在用户单击Yes按钮时解析.所以基本上确认对话框是异步的.

所以基本上我想要这样的东西:

$('a.my-link').click(function(e) {
  e.preventDefault(); e.stopPropogation();
  MyApp.confirm("Are you sure you want to navigate away?")
    .done(function() {
      //continue propogation of e
    })
})
Run Code Online (Sandbox Code Playgroud)

当然,我可以设置一个标志并重新触发点击,但这很麻烦.这样做的任何自然方式?

javascript dom event-propagation

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

C#:动态运行时强制转换

我想实现一个带有以下签名的方法

dynamic Cast(object obj, Type castTo);
Run Code Online (Sandbox Code Playgroud)

谁知道怎么做?obj肯定实现了castTo,但是需要正确地进行转换才能使我的应用程序的运行时绑定工作得以实现.

编辑:如果一些答案没有意义,那是因为我最初不小心输入dynamic Cast(dynamic obj, Type castTo);- 我的意思是输入应该是object或其他一些保证基类

c# casting c#-4.0

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