# Messagebox

> MessageBox - Async Modal Dialogs

- Skill: `jasonxudeveloper/messagebox` (Agent Skill)
- Install (CLI): `npx skillmds@latest add jasonxudeveloper/messagebox`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jasonxudeveloper/messagebox/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: jasonxudeveloper (https://skillmd.com/u/jasonxudeveloper)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jasonxudeveloper/messagebox

---


# MessageBox - Async Modal Dialogs

Built on UniTask for non-blocking async operations with automatic object pooling.

## When to Use
- Confirmation dialogs (Yes/No, OK/Cancel)
- Information prompts (OK only)
- Awaiting user decisions in gameplay

## API

### Show Method
```csharp
public static UniTask<bool> Show(
    string title,
    string content,
    string ok = "OK",
    string no = "Cancel"
)
```
Returns `true` for confirm, `false` for cancel.

### Management
- `MessageBox.CloseAll()` - Dismiss all active dialogs (for scene transitions)
- `MessageBox.Dispose()` - Release all pooled instances (app shutdown)
- `MessageBox.ActiveCount` - Currently displayed dialogs
- `MessageBox.PooledCount` - Cached instances in pool

## Patterns

### Confirmation Dialog
```csharp
bool confirmed = await MessageBox.Show(
    "Delete Item",
    "Are you sure you want to delete this item?",
    ok: "Delete",
    no: "Cancel"
);

if (confirmed)
{
    DeleteItem();
}
```

### Custom Button Text
```csharp
bool saved = await MessageBox.Show(
    "Save Changes",
    "Keep your changes?",
    ok: "Save",
    no: "Discard"
);
```

### Single Button (Notification)
```csharp
// Pass null or empty string to hide cancel button
await MessageBox.Show(
    "Success",
    "Operation completed!",
    ok: "OK",
    no: null
);
```

### Clean Up Before Scene Change
```csharp
MessageBox.CloseAll();
SceneManager.LoadScene("NextScene");
```

## Common Mistakes
- Forgetting to await (dialog shows but code continues immediately)
- Not handling both true/false return values
- Not calling CloseAll() before scene transitions

