Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Quick tapping crashes MaterialSnackbar

未关闭
#403 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
48/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
android, csharp
领域
mobile-dev

调研方向

查找 MaterialSnackbar 的构造函数和 InputTaskCompletionSource,然后在所述条件下重现 Android 上对 ActionButton.Command 的快速调用。验证重复点击能够完成 snackbar,且不会引发 InvalidOperationException 或导致崩溃;issue 中未指定具体文件或测试。

由索引模型根据 Issue 内容生成。

描述

🐛 Bug Report

If the UI thread is busy, or a weak device is used, then it becomes possible to call ActionButton.Command multiple times with quick clicks, as a result, after the second pressing InputTaskCompletionSource?.SetResult throws an exception

Is there any reason not to use TrySetResult ?

 internal MaterialSnackbar(string message, string actionButtonText, int msDuration = DurationLong, MaterialSnackbarConfiguration configuration = null)
        {
            ...
            var primaryActionCommand = new Command(async () =>
            {
                _primaryActionRunning = true;
                await DismissAsync();
                InputTaskCompletionSource?.TrySetResult(true);
            }, () => !_primaryActionRunning);
            ...
        }
Stack trace
XF.Material.Forms.UI.Dialogs.MaterialSnackbar.<.ctor>b__6_0 () [0x0007a] in <3cfa98f1ecd344d8b7c2286276967650>:0;XF.Material.Forms.UI.Dialogs.MaterialSnackbar

TaskCompletionSource`1[TResult].SetResult (TResult result)
<.ctor>b__6_0 ()
AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state)
SyncContext+<>c__DisplayClass2_0.<Post>b__0 ()
Thread+RunnableImplementor.Run ()
IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this)
Reason

System.InvalidOperationException: System.InvalidOperationException

Expected behavior

The app should not crash

Reproduction steps
Configuration

Version: 1.x

Platform:

  • 📱 iOS
  • 🤖 Android
  • 🏁 WPF
  • 🌎 UWP
  • 🍎 MacOS
  • 📺 tvOS
  • 🐒 Xamarin.Forms
主要语言
C#
星标
631
派生
150
PR 合并指标
30 天内没有已合并 PR

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

Baseflow/XF-Material-Library 的其他 Issue

查看 Baseflow/XF-Material-Library 的全部 Issue

相似的 Issue

更多 C# Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。