开发者

Monotouch: UIAlertView and WCF services, debugger.StackTrace

I'm currently using WCF in monotouch to call an existing service and a custom UIAlertView.

The problem is that if I create an UIAlertView as class instance and the I do the following:

public override void ViewDidAppear()
{
 _alertView.Message = "Loading...";
 _alertView.Show();

 _client.GetDataAsync("test");
 _client.GetDataCompleted += GetDataCompletedDelegate;

 base.ViewDidAppear();
}

void GetDataCompletedDelegate(object sender, GetDataEventArgs)
{
 // do someting with data
 _alertView.Hide();
}

it works but this advice is written in console : UIAlertView: wait_fences: failed to receive reply: 10004003

else, if I try to run this code:

public override void ViewDidAppear()
{
 using(CustomAV _alertView = new CustomAV())
 {
   _alertView.Message = "Loading...";
   _alertView.Show();

   _client.GetDataAsync("test");
   _client.GetDataCompleted += delegate{ 
     InvokeOnMainThread(delegate{
      // do someting with data
      _alertView.Hide();
     });
  };
 }

 base.ViewDidAppear();
}

the first time the code run, but now alert is shown. The second time the simulator can't startup. Couldn't register "com.yourcompany.wcftest" with the bootstrap server. Error: unknown error code. This generally means that another instance of this process was already running or is hung in the debugger.StackTrace. In this case I have to reboot the machine.

Thank you in advance.

EDIT:

Thank you Geoff, I've checked my code and into GetDataCompletedDelegate I've inserted a function that runs inside the UI Thread.

Inv开发者_Python百科okeOnMainThread(delegate{
 doSomething();
});

private void doSomething()
{
 // do stuff here
 _alertView.Hide();
}

The fency error continues to appear. If I use your solution inside doSomething() method, it works

_alertView.InvokeOnMainThread(delegate{
 _alertView.Hide();
});

Why? Maybe I didn't understand, but in the first snippet of code do something() works in the UI thread!! Isn't true?


You have 2 seperate problems here.

1: _alertView.Hide () is not running on the UI thread (this is what causes the fences error)

2: In your second example you're disposing the UIAlertVeiw immediately after creating it, but you have a instance delegate dangled off it. This crashes the runtime in a hard way, and then when you run it again since the old crashed process is still running the simulator wont let you start a second instance.

Use case #1 but do _alterView.InvokeOnMainThread (delegate { _alertView.Hide (); });

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜