相关疑难解决方法(0)

自动化InvokeRequired代码模式

我已经痛苦地意识到需要在事件驱动的GUI代码中编写以下代码模式的频率,其中

private void DoGUISwitch() {
    // cruisin for a bruisin' through exception city
    object1.Visible = true;
    object2.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)

变为:

private void DoGUISwitch() {
    if (object1.InvokeRequired) {
        object1.Invoke(new MethodInvoker(() => { DoGUISwitch(); }));
    } else {
        object1.Visible = true;
        object2.Visible = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是C#中的一个尴尬模式,无论是记忆还是打字.有没有人提出某种捷径或构造,在一定程度上自动化?如果有一种方法可以将函数附加到执行此检查的对象,而不必经历所有这些额外的工作,如object1.InvokeIfNecessary.visible = true类型快捷方式,那就太酷了.

上一页答案已经讨论的只是打电话的invoke()每次不切实际,甚则调用()语法既效率低下,仍然尴尬应对.

那么,有没有人想出任何捷径?

c# multithreading thread-safety invokerequired winforms

178
推荐指数
7
解决办法
13万
查看次数

ApartmentState for dummies

我刚用这个纠正了一个bug:

_Thread.SetApartmentState(ApartmentState.STA);
Run Code Online (Sandbox Code Playgroud)

现在我想了解它的含义,以及它的工作原理!

.net multithreading

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

在WinForms中,UI中可能有多个线程吗?

我认为答案是肯定的.我在stackoverflow上检查了类似的问题,但它们似乎根据特定解决方案所需的内容(但可能已经错过了某些内容)进行了不同的指示.

是否有可能在WinForms应用程序中拥有多个UI线程?我正在重构并想知道是否应该使用ConcurrentDictionary或Dictionary来访问那些访问表单的线程.这是针对具有多个开发人员/设计的更大代码,我希望尽可能选择(但不要过度设计).由于我正在寻找一般性答案,因此细节不在这个问题中,尽管它们通常都是.感谢您的期待和任何帮助 - 非常感谢.

c# multithreading winforms

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