c# – SynchronizationContext.Post到UI方法

我正在使用Web服务,因此我需要扩展会话长度/重新连接并获取大型数据集等.有时这可能很长,所以我想在一个单独的线程中异步更新UI.

我似乎无法理解使用synchronizationContext在我的UI线程上调用方法.我有它,我已经将我的UIThread上下文传递给我的线程,现在我想更新UI线程上的一些标签等.我已经阅读了很多帖子,但似乎没有解释如何简单地将一些参数传递回方法,或者他们可能会这样做但是我太累了/傻到看到它.

//在主UI线程上

public void updateConnStatus(string conn_name,bool connected)
{
        switch (conn_name)
        {
            case "Conn" : if (connected == true){ //do something} break;

//在单独的线程上

uiContext.Post( //something to do with delegates in here that eludes me );

如果有人可以简单地解释我如何将sendOrPostCallBack链接到原始方法,我将非常感激.

谢谢

编辑:

我设法让代码运行并尝试触发事件,它填充我的自定义eventArgs好,但要么说它没有实例化updateUIConnStatus,需要更多的调查:o

public void updateUIThread(string conn,bool connected)
    {
       uiContext.Post(new SendOrPostCallback((o) => { updateConnStatus(this,new MyEventArgs<String,Boolean>(conn,connected)); }),null);
    }

public class MyEventArgs<T,U> : EventArgs
    {
        private T _val1; private U _val2;
        public  MyEventArgs(T value1,U value2) { _val1 = value1; _val2 = value2; }
        public T val1 { get { return _val1;} }
        public U val2 { get {return _val2;} }
    }

public event EventHandler<MyEventArgs<String,Boolean>> updateConnStatus = Delegate {};

//在UI Thread Now上

public void updateConnStatus(object sender,MyEventArgs<String,Boolean> e)
    {
        switch (e.val1)
        {
            case "Conn1" :
                if (e.val2 == true)
                {

解决方法

您需要SendOrPostCallback类型的委托.这很尴尬,它只需要一个类型为object的参数.你肯定应该看看任务<> .NET 4中提供的类可以使这更容易.或者使用lambda,如下所示:
string conn_name = "foo";
        uiContext.Post(new SendOrPostCallback((o) => {
            updateConnStatus(conn_name,true);
        }),null);

{braces}之间的代码在UI线程上执行.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...