我正在处理与网络服务相关的工作,因此需要延长会话长度/重新连接并获取大量数据集等。有时这可能需要较长时间,因此我希望在单独的线程中进行操作,以便异步更新UI。
我似乎无法理解如何使用同步上下文在我的UI线程上调用方法。我已经将我的UIThread上下文传递给了我的线程,现在我想在UI线程上更新一些标签等。我已经阅读了大量文章,但没有一个能够简单地解释如何将一些参数传回方法,或者可能是因为我太累/愚蠢而没有看到。
//在主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)
{