私は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)
{