为什么我的回调消息在另一个线程中执行?

时间:2018-03-31 12:36:15

标签: c# .net wpf

  1. 为什么_OnStateChanged方法在另一个线程中执行,然后是MainWindow的实例?
  2. 还有另一种方法可以在不必使用代理的情况下调用myRichTextBox.AppendText()吗?

    public partial class MainWindow : Window {
    private static PureSocketClusterSocket _socket 
    //[...]
    
    public MainWindow() {       
        //[...]
        Debug.WriteLine("MainWindow() thread Id: {0}", Thread.CurrentThread.ManagedThreadId);
        _socket = new PureSocketClusterSocket(...); 
        _socket += _OnStateChanged; 
        //[...]
    }
    
    private void _OnStateChanged(WebSocketState newState, WebSocketState prevState) {
        Debug.WriteLine("_OnStateChanged() Thread Id: {0}", Thread.CurrentThread.ManagedThreadId);
        myRichTextBox.AppendText(...); 
    }
    }
    

1 个答案:

答案 0 :(得分:0)

  1. PureSocketClusterSocket使用使用PureWebSocket
  2. ClientWebSocket

    ClientWebSocket将异步引发事件(在池中的线​​程上),因此开发人员可以决定应该处理结果的线程。阻止UI线程等待来自网络的响应是一个坏主意,因为它将锁定UI

    1. 您需要使用委托(调度程序调用)才能返回UI。