我正在使用 Web 服务,因此我有必要延长会话长度/重新连接并获取大型数据集等。有时这可能很长,所以我希望它在一个单独的线程中异步更新 UI。
我似乎无法使用同步上下文来调用我的 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 线程上
public void updateConnStatus(object sender, MyEventArgs<String,Boolean> e)
{
switch (e.val1)
{
case "Conn1" :
if (e.val2 == true)
{