Woah there!遠離CheckForIllegalCrossThreadClass。這個財產,雖然微軟提供它,我敢肯定有非常,非常非常罕見的(我的意思是)使用它,千萬不要碰它。它會直接導致你的軟件受到傷害。
你可以使用一個簡單的ISyncronizeInvoke方法來更新你的UI,which I also wrote a blog post on(非常簡單)。
/// <summary>
/// Helper class that allows synchronized invoking to be performed in a single line of code.
/// </summary>
internal static class SynchronizedInvoke {
/// <summary>
/// Invokes the specified action on the thread that the specified sync object was created on.
/// </summary>
public static void Invoke(ISynchronizeInvoke sync, Action action) {
if (!sync.InvokeRequired) {
action();
}
else {
object[] args = new object[] { };
sync.Invoke(action, args);
}
}
}
用法很簡單。
private void MyThreadWork() {
// Do some work
SynchnronizeInvoke.Invoke(uxProgressBar,() => uxProgressBar.Style = ProgressBarStyles.Blocks);
}
感謝所有快速答案。我不知道那會很糟糕。當我第一次嘗試這樣做時,msdn說:「你不能從這個線程做到這一點,也許你應該設置Form.CheckForIllegalCrossThreadCalls = false」,所以我做到了,並且這導致了這個 –
某些Msdn文檔可能是一個有點誤導,但這就是像StackOverflow這樣的地方:) –